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

Mav*_*ick 4 java mysql jdbc arraylist

我在我的 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();
Run Code Online (Sandbox Code Playgroud)

还有其他方法可以做到这一点吗?也许与声明 stmt。

And*_*eas 6

使用正确数量的标记构建 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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)