不能在H2数据库中使用setArray JDBC(整数) [英] Cannot use setArray JDBC (integer) with H2 Database

查看:199
本文介绍了不能在H2数据库中使用setArray JDBC(整数)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在H2数据库的jdbc查询中放入一个整数数组.

I want to put an array of integers in my jdbc query with H2 database.

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语句:

But doest not work, I am getting this exception : org.h2.jdbc.JdbcSQLException: Data conversion error converting "(1,2,3)"; SQL statement:

我正在使用H2数据库. 你能帮我吗?

I am using H2 database. Can you help me please?

推荐答案

使用JDBC IN数组参数很困难.如果要让查询在所有DBMS上都能使用,则会更加困难.这就是为什么我创建JDBC实用程序以更轻松地使用JDBC IN数组参数的原因.

Working with JDBC IN array parameter is hard. It is more harder if you want your query works across all DBMS. That was why I created JDBC utilities to work with JDBC IN array parameters easier.

1.如果是Maven,请将以下依赖项添加到pom.xml

    <dependency>
      <groupId>com.appslandia</groupId>
      <artifactId>appslandia-common</artifactId>
      <version>6.8</version>
    </dependency>

2.如果没有行家,请下载此文件jar文件

2. If no 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} );
// 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", not_null_string_value);
stat.setString2("str_b", null_or_string_value);
// setLong, setFloat, setDouble, setDate, ...

5.一些注意事项

  • 支持的参数名称.不再 ?在您的查询中
  • Sql中的参数需要以@开头(例如Ado.NET)
  • SQL中的IN数组参数必须使用此语法IN(@param_name)

这篇关于不能在H2数据库中使用setArray JDBC(整数)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆