将 java.sql.Array 创建为整数数组以用于准备好的语句 [重复]
Posted
技术标签:
【中文标题】将 java.sql.Array 创建为整数数组以用于准备好的语句 [重复]【英文标题】:Creating java.sql.Array as an array of integers for use in prepared statement [duplicate] 【发布时间】:2017-12-27 21:36:33 【问题描述】:我需要使用准备好的语句在我的 SQL 语句中使用整数数组。
当我尝试创建数组时,当我阅读Javadoc it says 时,它只显示了字符串数组的创建。我必须在一次调用中搜索很多表键 ID(以前一次遍历它们一次会导致 22k 查询)所以我一次需要所有结果。
我的一段查询字符串看起来像这样
AND A.KEY in (?) order by KEYID DESC
这是我构建查询的地方(通过使用带有我的 ID 列表的 java.sql.Array)
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.Array 使用字符串,但我需要将它们作为整数发送。
我的 ID 是 ArrayList<Integer>
,这是为什么这不是重复问题的关键我需要向 sql 语句发送整数列表 - 我的方式适用于字符串。
当我运行我的程序时编辑一次发送一个 int,它工作正常。
我该如何解决这个问题以发送带有整数的 SQL 语句来代替我的?在sql查询中?
【问题讨论】:
这不是重复的。链接的问题正在处理一个字符串数组。 【参考方案1】:所以我想出了自己的解决方法来解决这个问题。我没有将整个列表作为参数发送到我的 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());
【讨论】:
如果有人有理由为什么我不应该这样做,请随时发表评论。以上是关于将 java.sql.Array 创建为整数数组以用于准备好的语句 [重复]的主要内容,如果未能解决你的问题,请参考以下文章