使用JDBC4(通过JDK6)使用最新的JDBC4驱动程序连接到postgresql 9.0。
conn = dpaDs.getConnection();
PreparedStatement stmt = conn.prepareStatement("delete from fss where f_id=? and f_lastmodified=?");
UUID target = UUID.fromString("8c5c5ac2-3a2a-49f3-ae48-29226d6ea3e7");
stmt.setObject(1, target, 1111);
//non of these work
//stmt.setNull(2,93);
//stmt.setObject(2,null, 93);
//stmt.setObject(2,null, java.sql.Types.NULL);
//stmt.setNull(2, java.sql.Types.NULL);
int rowCount = stmt.executeUpdate();
int g = 8;
将第二个参数设置为null的正确方法是什么? 我知道我可以使用“哪里...... f_lastmodified为null”,但是没有办法解决这个问题吗?
答案 0 :(得分:3)
那不行。
使用=
运算符无法进行NULL比较。如果要测试NULL,则必须使用and f_lastmodified IS NULL
。
您不能在预准备语句中使用IS NULL条件的参数。
答案 1 :(得分:0)
如果您使用命名参数(例如:p而不是?)而不是位置参数,那么您可以执行以下操作,
((:p is null and f_lastmodified is null) or f_lastmodified = :p)
这有点尴尬,但它完成了工作。我没有尝试过jdbc,只有.net上的Npgsql,但我认为它应该是一样的。
答案 2 :(得分:0)
在postgres中,您可以使用is not distinct from
,它实际上是一个空安全的相等性检查。
如果您更改要使用的查询与此并没有区别,则现在可以将null设置为参数2。
delete
from fss
where f_id = ?
and f_lastmodified is not distinct from ?