【软件系肖潇】解决使用DButils进行jdbc多表联合操作时抛出sql异常的问题
程序员文章站
2022-07-05 18:17:42
...
问题叙述:
使用DButils进行多表联合时抛出java.sql.SQLException: com.microsoft.sqlserver.jdbc.SQLServerException: 无法绑定由多个部分组成的标识符
代码如下:
public KindVO scanKindName(int productId) {
String kindNameSQL = "SELECT [kind_name]"
+ " FROM [t_product] , [t_kind]"
+ " WHERE t_kind.[kind_id] = t_product.[kind_id]"
+ " AND t_product.[product_id] = ?";
KindVO kinvo = null;
try {
kinvo = qr.query(kindNameSQL, new BeanHandler<KindVO>(KindVO.class),productId);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return kinvo;
}
将sql语句在数据库执行则正常显示,代码如下:
SELECT [kind_name] FROM [t_product] , [t_kind]
WHERE t_kind.[kind_id] = t_product.[kind_id] AND t_product.[product_id] = 4
解决思路:
在sql 语句正确无误的前提下,执行方法抛出异常。所以考虑到sql正确,但是否符合dbutils的书写规范?
将数据库中语句粘贴至方法中进行对比,发现除属性位置之外没有任何不同。
得出初步结论,在使用DButils进行多表操作时,where后属性名的位置顺序要和from后表格的位置保持一致。
验证结论:
修改位置重新执行,编译通过。