我是H2的新手。H2数据库是否允许在where子句中使用多个case语句?H2文档在示例中只提到了一个案例陈述。因为当我尝试使用多个case语句时,connection.preparedStatement(查询(会返回一个NullPointer。我相信连接是成功创建的,因为其他测试运行得很完美。
以下是我用作java准备语句(带有多个case语句(的查询
SELECT * FROM AUDIT_RECORDS WHERE ID = CASE WHEN ? IS NULL THEN ID ELSE ? END AND STATUS = CASE WHEN ? IS NULL THEN STATUS ELSE ? END
当我使用一个单独的case语句时,流就起作用了。当我使用多个案例时,它会给出NullPointer。
有没有一种方法可以配置H2以查看内部日志,这样我就可以分析并确定问题所在?我认为,向驾驶员解释事先准备好的陈述可能存在问题。我还在一个单独的H2服务器(不是嵌入式服务器(中运行了这个相同的查询,它运行得很好。
如有任何帮助,我们将不胜感激。提前谢谢。
也许不是一个直接的答案,但CASE
表达式在这里不是最合适的。我会使用:
SELECT *
FROM AUDIT_RECORDS
WHERE ID = COALESCE(?, ID) AND STATUS = COALESCE(?, STATUS);
这种方法允许您只绑定每个?
占位符值一次。