Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将字符串值传递给SQL bigint列_Java_Sql_Jdbc - Fatal编程技术网

Java 将字符串值传递给SQL bigint列

Java 将字符串值传递给SQL bigint列,java,sql,jdbc,Java,Sql,Jdbc,鉴于以下陈述: String query = "Select * from T_spareParts where SparePartPK IN (? )" 在我的BackBean(JSF 2)中,我首先遍历表中的所有汽车,并构建一个包含当前选择的所有汽车的字符串(通过选择每个汽车ID作为主键),因此在传递给SQL之前的最后一个字符串可能如下所示: String finalString = " '1','2','3','4'"; 然后: this.pr

鉴于以下陈述:

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

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

谢谢您的建议。尽管作为一种替代方法,我创建了一个
StoredProcedure
,其中包含一个参数,在StoredProcedure中,我使用传递的参数运行上述查询,在部分中形成

因此上述所有代码仍然适用,传递给StoredProcess的参数是一个字符串,由
分隔,不带单引号


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

尝试从集合中删除单引号。@AVD-刚刚尝试了您的建议-引发了完全相同的异常。是否可以在prepareStatement中使用put finastring而不使用参数setString?谢谢您的建议。我将字符串更改为long[]类型,并尝试使用
this.prepareStatement.setObject(1,testArray)
设置prepareStatement,但出现异常错误
驱动程序不支持此函数。setObject(1,类[J)
。我不允许更改我们使用的JDBC驱动程序……我相信有些人会不同意我的观点,但我尽量远离存储过程,只在绝对必要时使用它们。存储过程语言是不可移植的-几乎所有支持存储过程的数据库都有不同的存储过程语言。如果使用存储过程d proc,以后需要切换到另一个数据库,您必须重新编写存储的proc,而准备好的语句将在所有数据库中运行。对于一个小的爱好项目,我想这并不重要,但对于“真实”开发,它经常会起作用。我明白您的观点-我们刚刚转移到一个新的SQL Server,通常他们喜欢运行我目前所在公司的所有东西都是微软的,所以转移到另一个数据库环境的可能性很小。不过,感谢你指出这一点,我会在以后的案例中牢记这一点。