将String值传递给SQL bigint列

时间:2012-03-28 01:15:33

标签: java sql jdbc

鉴于以下声明:

 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";

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

感谢您的建议。虽然作为替代方案,我创建了一个StoredProcedure,其中有一个参数,在StoredProcedure中我运行上面的查询,使用传递的参数来制定IN部分。

所以上面的代码仍然适用,传递给storeDProcedure的参数是一个由,分隔的字符串,没有单引号。

可能不是最佳答案,但工作效果很好:)。