Java PreparedStatement允许您为给定参数设置值或将其设置为NULL
SELECT *
FROM ADDRESS
WHERE ADDRESS_LINE1 = ?
所以我们可以编写代码来设置此参数:
if (addressLine1 != null) {
preparedStatement.setString(1, addressLine1);
} else {
preparedStatement.setNull(1, VARCHAR);
}
但是,它也声明您永远不要使用=运算符将值与null进行比较,而实际上将IS运算符用于null比较。
准备好的语句实际上是在这里为IS交换了=运算符还是IS,还是只是使用=运算符插入了null?如果是后者,那么什么时候使用它才有用呢?您实际上得到了预期的结果吗?
我在下面的堆栈溢出问题的后面问这个问题
答案 0 :(得分:2)
否,准备好的语句未将=
换成IS
。您的代码对此负责。就像您将负责使用字面意义上的使用something = NULL
而不是something IS NULL
进行查询一样。
能够将其设置为null的目的是用于例如update或insert语句,或者在您正确使用is
或is distinct from
的情况下。
它也可用于空条件检查,例如where ? is null or something = ?
与
String something = "xyz"; // or String something = null;
statement.setString(1, something);
statement.setString(2, something);