5

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

“从 BAR 中选择 FOO,其中 FOOBAR=?”

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

下面的代码会起作用吗?

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

如果不是,应该如何处理?

4

4 回答 4

6

它不起作用, null 没有等价物。如果您使用的是 PreparedStatement,请尝试以下操作:

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

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

于 2013-07-15T07:21:10.647 回答
2

根据 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 建议什么对我在甲骨文上都不起作用。

于 2015-10-14T11:41:32.473 回答
0

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

于 2015-01-14T18:02:23.413 回答
-1
if(requiredValue == null){
 sql = "SELECT * FROM Table Where COLUMN is NULL"
}

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

于 2013-07-15T07:14:28.067 回答