开发者社区> 问答> 正文

dbutils使用带参数的子查询出错?? 400 报错

dbutils使用带参数的子查询出错?? 400 报错

sql语句为:select r.fSumResult,r.fProblemCode from OA_Problem_Record r where r.fProblemCode = 
   (select p.localProblemCode from OA_Temp_Problem p where p.remoteProblemId=?);

然后设参数,就报错了。。。

报这个错:java.sql.SQLException: com.microsoft.sqlserver.jdbc.SQLServerException: 无法绑定由多个部分组成的标识符 "p.remoteProblemId"。

奇怪的是我把?改为具体参数值时,是可以执行的。。。。

展开
收起
爱吃鱼的程序员 2020-05-29 17:47:38 463 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    那应该是代码写错了

    ######

    如果不带子查询的话,也是正常的,

    ######

    就是要看你是怎么传参数的,说不定你传了个错误类型的参数

    ######

    就是传了个string的进去。。

    ######

       RowProcessor rowprocessor = new BasicRowProcessor();
       QueryRunner run = new QueryRunner();
       //MapHandler将一条记录转换为Map对象
       ResultSetHandler rshandler = new MapHandler(rowprocessor);
       conn = getConnection();
       map = (Map) run.query(conn, query, params, rshandler);

    ######

    你这方法弄错了吧?

    至少参数顺序写错了,params 在后,rshandler 在前

    ######

    QueryRunner 的方法 query(Connection, String, Object[], ResultSetHandler)

    ######

    我怀疑你在穿params参数的时候有问题,没代码,不知道有什么问题,自己检查下吧

    ######

    我详细描述下问题:

    使用DBUtil查询数据库时 Java报 列名 'lei_xing' 无效。但是这个SQL语句在MS SQL的控制台下面能够争取执行。到底是什么原因啊?

    这是查询部分的代码:

    String sql = "select tg.fid,tg.intime,tg.lei_bie,tg.ftitle,tg.inpart,tg.inname,jl.id from tonggao tg left join (select id,fid from yue_du_ji_lu y where lei_xing = ?) jl on tg.fid = jl.fid ";
    Connection conn = new DBConnection().getConn();
    QueryRunner qr = new QueryRunner();
    List list = qr.query(conn, sql,new ArrayListHandler(), new Object[] {"cd"});
    return list;

    ps:去掉子查询中的where条件就能通过。

    ######

    Java报 列名 'lei_xing' 无效 

    都这样说了还要怎么样啊。。。

    没有where不就没有使用到   'lei_xing' 列。 所以正确.

    2020-05-29 17:47:39
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载