将 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 创建为整数数组以用于准备好的语句 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

将每行从整数列表转换为整数数组?

做一个递增的数组,同时修改数组

使用 ByteBuffer 将 n 字节数组转换为整数

在java中将整数列表转换为整数数组[重复]

软件工程个人作业04 - 整数数组中最大子数组和(第二版)

如何将 C++ 或 C 中的字符串转换为整数数组?