给出以下声明:
String query = "Select * from T_spareParts where SparePartPK IN (? )"
在我的BackBean(
JSF 2
)中,我首先遍历表中的所有汽车,并为当前选定的所有汽车构建一个String(通过选择每个汽车的ID作为主键),因此传递给SQL之前的最终String可能类似于: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
类型,我们正在传递String。但是在SQL Server(2008)中,我可以执行以下操作:
Select * from T_spareParts where SparePartPK IN ('1','2','3','4')"
返回预期的结果。为什么我会收到例外情况,如何解决该问题? (如果这不是最好的方法,请随时发表评论)
更新:
我也尝试过产生
finalString
不带单引号,这会引发相同的异常:String finalString = " 1,2,3,4";
最佳答案
您应该将数字放入数组(而不是字符串)中,并使用prepareStatement.setArray()