SQLSyntaxErrorException:由于HSQLDB中的“COALESCE”导致的数据类型异常

时间:2017-06-08 05:48:46

标签: java mysql sql hsqldb

我必须将org.hsqldb库版本从2.2.9升级到2.4.0,以便在此站点的另一个问题中建议使用NOT EXIST关键字支持架构,但后来我遇到了很多JUnit测试失败

Caused by: java.sql.SQLSyntaxErrorException:                             
data type cast needed for parameter or null literal in statement
[INSERT INTO xxx(y) VALUES (COALESCE(?,?))]

我的hsqldb看起来像:

CREATE TABLE xxx (
    y VARCHAR (32) NOT NULL
)

它们只对我有用的是在插入之前将COALESCE逻辑移动到我的Java源代码。

问题:

  1. 它让我觉得架构中的要求NOT NULL在版本2.4.0之前没有用,这就是为什么我的测试现在才失败的原因。除了删除这个要求之外,我还能做些什么来避免这种限制?

  2. 是否有类似COALESCE的函数,如果所有参数都为null,则会插入默认值?

1 个答案:

答案 0 :(得分:1)

你可以用演员来修复它:

INSERT INTO xxx(y) VALUES (COALESCE(CAST(? AS VARCHAR(32)),?)