我想在H2数据库的jdbc查询中放入一个整数数组。
Integer[] list = new Integer[]{1,2,3};
String query = "SELECT EXAMPLE FROM DATA WHERE EXAMPLE IN (?)";
PreparedStatement ps = GestionBDD.getConexionBD().prepareStatement(query);
Array array = GestionBDD.getConexionBD().createArrayOf("int", list);
ps.setArray(1, array);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
// DO THINGS
}
但是不起作用,我得到了这个异常:org.h2.jdbc.JdbcSQLException:数据转换错误转换为“(1,2,3)”; SQL语句:
我正在使用H2数据库。 你能帮我吗?
答案 0 :(得分:1)
使用JDBC IN数组参数很困难。如果您希望查询在所有DBMS上都能工作,则会更加困难。这就是为什么我创建JDBC实用程序以更轻松地使用JDBC IN数组参数的原因。
1。如果是Maven,请将以下依赖项添加到pom.xml
<dependency>
<groupId>com.appslandia</groupId>
<artifactId>appslandia-common</artifactId>
<version>6.0</version>
</dependency>
2。如果没有专家,请download this jar file
3。修正您的代码(可以保证所有DBMS都能正常工作)
static final Sql EXAMPLE_SQL
= new Sql("SELECT EXAMPLE FROM DATA WHERE EXAMPLE IN (@example_array)");
StatementImpl stat = new StatementImpl(GestionBDD.getConexionBD(), EXAMPLE_SQL);
stat.setIntArray("example_array", new int[] {1, 2, 3} );
// OR stat.setIntArray("example_array", 1, 2, 3);
ResultSet rs = stat.executeQuery();
while (rs.next()) {
// DO THINGS
}
rs.close(); stat.close();
4。非IN数组参数
final Sql sampleSql
= new Sql("SELECT * FROM Table WHERE a=@int_a AND b=@str_b)
StatementImpl stat = new StatementImpl(conn, sampleSql);
stat.setInt("int_a", int_value);
stat.setString("str_b", required_string_value);
// stat.setString2("str_b", null_or_string_value);
// setLong, setFloat, setDouble, setDate, ...
5。一些注意事项