无法将 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 数据库一起使用的主要内容,如果未能解决你的问题,请参考以下文章

H2数据库存储在哪里?

org.h2.jdbc.JdbcSQLException:对象已经关闭

Hibernate/H2 外键抛出 org.h2.jdbc.JdbcSQLException

Spring Boot 2 - H2 数据库 - @SpringBootTest - org.h2.jdbc.JdbcSQLException 失败:表已存在

带有忽略大小写的 JDBC URL 不适用于 H2 数据库连接

java需要h2数据库抛出jdbc异常