例如,我对 PreparedStatement 有以下选择查询:
“从 BAR 中选择 FOO,其中 FOOBAR=?”
FOOBAR 的参数可以有一个值,也可以为空。
下面的代码会起作用吗?
if(<condition>) preparedStatement.setString(1, "<string value>");
else preparedStatement.setString(1, null);
如果不是,应该如何处理?
例如,我对 PreparedStatement 有以下选择查询:
“从 BAR 中选择 FOO,其中 FOOBAR=?”
FOOBAR 的参数可以有一个值,也可以为空。
下面的代码会起作用吗?
if(<condition>) preparedStatement.setString(1, "<string value>");
else preparedStatement.setString(1, null);
如果不是,应该如何处理?
它不起作用, null 没有等价物。如果您使用的是 PreparedStatement,请尝试以下操作:
if(<condition>) preparedStatement.setObject(1, "<string value>");
else preparedStatement.setNull(1, Types.VARCHAR);
它会将 null 作为 IN 参数发送。
根据 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 建议什么对我在甲骨文上都不起作用。
空值参数和列中的空值之间存在差异。
if(requiredValue == null){
sql = "SELECT * FROM Table Where COLUMN is NULL"
}
在这种情况下,您不必设置该值。