java - 无法将 setArray JDBC(整数)与 H2 数据库一起使用
问题描述
我想在带有 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,下载这个jar文件
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
推荐阅读
- windows - 如何在系统关闭时使用 PowerShell 运行一些代码?
- java - ImageIO.write 的写入器无效
- javascript - 通过 php POST 发送的关联数组不完整
- python - 可视化非数值数据;字典到思维导图?
- javascript - Javascript - 根据边缘条件从数组创建嵌套对象
- javascript - Chart.js 错误:您可能需要适当的加载程序来处理此文件类型
- python - 如何在 Python 3 中更新 OrderedDict 中的键值?
- tradingview-api - Pine Editor Trading View 全局变量 每个柱都有一个值
- php - 如何为 Laravel Mailable 包含 HTML 而不是刀片模板?
- node.js - express.js:我如何在 req.session 中存储数据?