在Java DB2 JDBC中:如何在WHERE子句中为SELECT语句使用null参数,其中值可以为null或不为null?

时间:2013-07-15 07:10:13

标签: java jdbc db2 prepared-statement

例如,我对PreparedStatement有以下选择查询:

“选择FOO从哪里FOOBAR =?”

FOOBAR的参数可以有一个值,也可以为null。

以下代码是否有效?

if(<condition>) preparedStatement.setString(1, "<string value>");
else preparedStatement.setString(1, null);

如果没有,应如何处理?

4 个答案:

答案 0 :(得分:5)

它不起作用,null没有等价。如果您正在使用PreparedStatement,请尝试以下方法:

if(<condition>) preparedStatement.setObject(1, "<string value>");
else preparedStatement.setNull(1, Types.VARCHAR);

它会将null作为IN参数发送。

答案 1 :(得分:1)

根据SQL标准,如果列具有NULL值,则检查其是否具有NULL值的搜索条件是“列IS NULL”。如果列没有空值,则可以使用“column ='blabla'等条件。要使参数标记在两种情况下均有效,请按以下方式更改语句:

SELECT FOO FROM BAR WHERE COALESCE(FOOBAR, 'a') = ? "

并拥有以下代码:

if(<condition>) preparedStatement.setString(1, "<string value>");
else preparedStatement.setString(1, "a");

无论@Mark建议什么都不适用于甲骨文。

答案 2 :(得分:0)

列值中的null值参数与空值之间存在差异。

答案 3 :(得分:-1)

if(requiredValue == null){
 sql = "SELECT * FROM Table Where COLUMN is NULL"
}

在这种情况下,您不必设置值。