无法将 setArray JDBC(整数)与 H2 数据库一起使用
Posted
技术标签:
【中文标题】无法将 setArray JDBC(整数)与 H2 数据库一起使用【英文标题】:Cannot use setArray JDBC (integer) with H2 Database 【发布时间】:2019-05-14 17:06:57 【问题描述】:我想在我的 jdbc 查询中使用 H2 数据库放入一个整数数组。
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: Data conversion error conversion "(1,2,3)"; SQL语句:
我正在使用 H2 数据库。 你能帮帮我吗?
【问题讨论】:
检查一下,可能对你有帮助。 ***.com/questions/37693849/… 数据库中定义为 INT 或 VARCHAR 的示例是什么? 这样:如果不存在数据则创建表(示例 int auto_increment) 你可以试试GestionBDD.getConexionBD().createArrayOf("INTEGER", list);
我也试过了,还是不行。看来这不是错误
【参考方案1】:
使用我的 JDBC 实用程序轻松处理 JDBC IN 数组参数:
1.如果是 Maven,请将以下依赖项添加到您的 pom.xml 中
<dependency>
<groupId>com.appslandia</groupId>
<artifactId>appslandia-common</artifactId>
<version>7.9</version>
</dependency>
2。如果没有 maven,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 );
ResultSet rs = stat.executeQuery();
while (rs.next())
// DO THINGS
rs.close(); stat.close();
4.命名参数/空参数
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.setInt2("int_a", null_value);
stat.setString("str_b", str_value);
// ...
5.一些注意事项
支持的参数名称。不再 ?在您的查询中 Sql中的参数需要以:开头(如JPA参数) SQL中的IN数组参数必须是这个语法IN:param_name【讨论】:
以上是关于无法将 setArray JDBC(整数)与 H2 数据库一起使用的主要内容,如果未能解决你的问题,请参考以下文章
org.h2.jdbc.JdbcSQLException:对象已经关闭
Hibernate/H2 外键抛出 org.h2.jdbc.JdbcSQLException
Spring Boot 2 - H2 数据库 - @SpringBootTest - org.h2.jdbc.JdbcSQLException 失败:表已存在