gpt4 book ai didi

java - 无法将 setArray JDBC(整数)与 H2 数据库一起使用

转载 作者:行者123 更新时间:2023-11-30 05:38:42 25 4
gpt4 key购买 nike

我想在 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数据库。你能帮我一下吗?

最佳答案

使用我的 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 参数)
  • IN Sql 中的数组参数必须采用以下语法 IN :param_name

关于java - 无法将 setArray JDBC(整数)与 H2 数据库一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56135349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com