鉴于以下声明:
String query = "Select * from T_spareParts where SparePartPK IN (? )"
在我的BackBean(JSF 2
)中,我首先遍历表中的所有汽车并构建当前所选车辆的字符串(通过选取每个车辆ID作为主键),然后将最终字符串传递给SQL可能看起来像:
String finalString = " '1','2','3','4'";
然后:
this.prepareStatement= this.connection.prepareStatement(query);
this.prepareStatement.setString(1,finalString);
this.prepareStatement.executeQuery();
抛出的异常是:
Error converting data type nvarchar to bigint.
现在我的理解是异常是由于SparePartPK
是类型bigint
而我们正在传递一个字符串。
但在SQL Server(2008)中,我可以这样做:
Select * from T_spareParts where SparePartPK IN ('1','2','3','4')"
按预期返回结果。为什么我得到例外,我该如何纠正这个问题? (如果这不是最佳方法,也可以随意评论)
我还尝试生成finalString
而没有单引号,这会导致抛出相同的异常:
String finalString = " 1,2,3,4";
答案 0 :(得分:1)
您应该将数字放入数组(而不是字符串),并使用preparedStatement.setArray()
答案 1 :(得分:0)
感谢您的建议。虽然作为替代方案,我创建了一个StoredProcedure
,其中有一个参数,在StoredProcedure中我运行上面的查询,使用传递的参数来制定IN
部分。
所以上面的代码仍然适用,传递给storeDProcedure的参数是一个由,
分隔的字符串,没有单引号。
可能不是最佳答案,但工作效果很好:)。