创建 java.sql.Array 作为整数数组,以便在预准备语句中使用



我需要使用预准备语句在我的SQL语句中使用整数数组。

当我尝试创建数组时,当我阅读Javadoc时,它说它只显示字符串数组的创建。我必须在一次调用中搜索很多表键 ID(以前一次遍历它们会导致 22k 查询(,所以我一次需要所有结果。

我的查询字符串的一部分如下所示

AND A.KEY in (?) order by KEYID DESC

这是我构建查询的地方(通过使用java.sql.Array和我的ID列表(

StringBuilder query = new StringBuilder(Query);             
PreparedStatement stmt = connection.prepareStatement(query.toString());
java.sql.Array array = connection.createArrayOf("varchar", Ids.toArray());
stmt.setArray( 1, array);
ResultSet results = stmt.executeQuery();

我试图将它们作为字符串运行,作为 sql。数组使用字符串,但我需要将它们作为整数发送。

我的 id 作为ArrayList<Integer>通过,这是为什么这不是重复问题的关键 我需要向 sql 语句发送整数列表 - 我的方式适用于字符串。

当我运行我的程序一次发送一个 int 时编辑,它工作正常。

如何解决此问题以发送带有整数的 SQL 语句来代替 my?在 sql 查询中?

所以我想出了自己的解决方法。我没有将整个列表作为参数发送到我的 set 语句,而是动态添加 ', ?' 以满足我有多少输入。

然后,我将数组列表中的每个项目动态添加到下一个位置的 set 语句中 (?(。

这不如抛出列表有效,但至少我只对我的数据库进行了 1 次调用。

if (Ids.size()==1){
stmt.setInt( 1, Ids.get(0).intValue());
}

if (Ids.size() > 1){
int temp = Ids.size();
while (temp >1){
query.insert(Query.indexOf("?") + 1, ", ?");
temp-=1;
}
stmt = connection.prepareStatement(query.toString());
for (int i=1 ; i<=Ids.size(); i++){
stmt.setInt( i, Ids.get(i-1).intValue());
}
}

最新更新