在 prepareStatement 中使用 COALESCE 来“插入”cmd
Posted
技术标签:
【中文标题】在 prepareStatement 中使用 COALESCE 来“插入”cmd【英文标题】:Use COALESCE in prepareStatement for "insert into" cmd 【发布时间】:2020-05-04 13:22:50 【问题描述】:我试图在 cmd 下执行,但这个抛出异常:
org.hsqldb.HsqlException: 操作中的数据类型不兼容
conn.prepareStatement("INSERT INTO TableA (colA) VALUES (IFNULL(?, 1)))
这里 TableA 的 colA 具有整数数据类型。 但是,如果我将 cmd 以上更改为
conn.prepareStatement("INSERT INTO TableA (colA) VALUES(IFNULL(null, 1)))
工作正常但没有任何意义,因为想在运行时传递 colA 值。
代码:
ps = conn.prepareStatement("INSERT INTO TableA (colA) VALUES(IFNULL(?, 1))")
ps.setObject(1, 5); // this cmd doesn't have any problem code is failing at preparestatement itself
【问题讨论】:
请edit您的问题并添加您的Java代码。 我认为这是传递参数的问题,而不是代码。参数如何设置?澄清你的问题。 只有两行代码 这应该适用于最新版本的 HSQLDB。你用的是哪个版本? CREATE TABLE 语句是什么? 【参考方案1】:setObject 是通用的,所以如果你想强制使用一个类型,你可以使用如下第三个参数:
ps.setObject(1, 5, JDBCType.INTEGER);
因为你使用了一个常量值,所以你的编译器必须决定是整数还是其他数值类型。
你也可以写
Integer myValue = 5;
ps.setObject(1, myValue);
或
Integer myValue = 5;
ps.setObject(1, myValue.intValue());
【讨论】:
@BhawaniSingh 请发布您在我的代码中遇到的错误 在执行conn.prepareStatement("INSERT INTO TableA (colA) VALUES (IFNULL(?, 1))")
行时得到org.hsqldb.HsqlException: incompatible data type in operation
@BhawaniSingh 你确定 colA 有整数作为数据类型吗?【参考方案2】:
使用setInt
代替setObject
ps.setInt(1, 5);
【讨论】:
prepareStatement 本身失败以上是关于在 prepareStatement 中使用 COALESCE 来“插入”cmd的主要内容,如果未能解决你的问题,请参考以下文章
JDBC PrepareStatement对象执行批量处理实例
如何使用 PrepareStatement 在 Java 中执行 INSERT SELECT INTO
JDBC中PrepareStatement 和Statement