给出以下声明:

 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.


现在我的理解是,异常是由于SparePartPKbigint类型,我们正在传递String。

但是在SQL Server(2008)中,我可以执行以下操作:

 Select * from T_spareParts where SparePartPK IN ('1','2','3','4')"


返回预期的结果。为什么我会收到例外情况,如何解决该问题? (如果这不是最好的方法,请随时发表评论)

更新:

我也尝试过产生finalString不带单引号,这会引发相同的异常:

String finalString = " 1,2,3,4";

最佳答案

您应该将数字放入数组(而不是字符串)中,并使用prepareStatement.setArray()

10-06 12:49