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。
使用正确数量的标记构建 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)