当前位置: 首页 > 面试题库 >

如何在MySQL的SQL查询中将ArrayList <>作为IN子句传递

利博远
2023-03-14
问题内容

我在Java程序中使用mySQL JDBC驱动程序。我想在SQL查询的IN子句中传递ArrayList。

我确实使用了这样的准备好的语句,但这会引发

“ java.sql.SQLFeatureNotSupportedException”异常

由于mysql不支持此功能。

ArrayList<String> list = new ArrayList<String>();
PreparedStatement pstmt = 
            conn.prepareStatement("select * from employee where id in (?)");
Array array = conn.createArrayOf("VARCHAR", list.toArray());
pstmt.setArray(1, array);
ResultSet rs = pstmt.executeQuery();

还有其他方法吗?也许与语句stmt。


问题答案:

使用正确数量的标记构建SQL语句,并设置所有值。

注意:数据库对允许的参数数量有限制,尽管对于MySQL(65535)来说非常高。

char[] markers = new char[list.size() * 2 - 1];
for (int i = 0; i < markers.length; i++)
    markers[i] = (i & 1 == 0 ? '?' : ',');
String sql = "select * from employee where id in (" + markers + ")";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
    int idx = 1;
    for (String value : list)
        stmt.setString(idx++, value);
    try (ResultSet rs = stmt.executeQuery()) {
        while (rs.next()) {
            // code here
        }
    }
}


 类似资料:
  • 问题内容: 我正在尝试作为请求执行查询,以便从我创建的索引中提取数据。索引中的数据是DB 的表,但是通过进行配置。 这是我的不带IN子句的请求: http:// localhost:9200 / response_summary / search?q = api:“位置” + AND + transactionoperationstatus:“已收费” + AND + operatorid =’D

  • 问题内容: 如何在Firebase Android中查询SQL IN子句?我想在Firebase Recycler适配器中使用它,以便根据某些条件仅检索某些子级。类似于以下语句: 我需要一个Firebase查询才能在Firebase Recycler适配器中使用它。 问题答案: 我找到了解决方案:我们无法使用。相反,我们必须创建可扩展的自定义适配器。 要将值传递给此适配器,首先我们必须使用检索数据

  • 问题内容: 我们正在尝试为本地sql查询动态生成IN子句以返回JPA实体。Hibernate是我们的JPA提供程序。我们的代码看起来像这样。 这是行不通的,in子句无法识别通过这种方式传入的任何值。有谁知道解决这个问题的方法吗? 问题答案: 在您的情况下,JPA支持命名列表参数:

  • 我写了一个代码来管理一个咖啡馆,所以在框架中我添加了一个JTable,每次我从JComboBox中选择一个项目,它都应该显示在JTable中。为此,我添加了一个按钮,对于它的操作,我确保每次单击它时,它都将从JComboBox中单击的项存储在数据库中,然后将从数据库中获取的项存储在JTable中。但问题是JTable有两列,而JComboBox中的选择只有一列。因此,另一列必须从其他数据库调用,这

  • 问题内容: 嗨, 我有一个变量$ 1,其中包含逗号分隔的电子邮件地址,例如john @ example.com,pat @ example.com。我希望在类似where的子句中传递此变量 但是显然这行不通,我尝试了APEX_UTIL.STRING_TO_TABLE和DBMS_UTILITY.COMMA_TO_TABLE但徒劳。 任何帮助表示赞赏。 问题答案: 正如Pavanred所暗示的那样,最

  • 我有一个类Api,它包含一个数据列表: