在查询中使用set null的Prepared语句不返回任何记录

yay*_*zis 1 java jdbc prepared-statement

我使用预准备语句来读取/写入我的数据库(SQLite)中的数据.在我的表中INVENTORY,有一些记录null在列中有值paleta(列VARCHAR在表中定义).我想选择这些记录,我试过:

sq = "SELECT * FROM INVENTORY WHERE paleta = ? AND product = ? AND lot = ?";
//...
stm = c.prepareStatement(sq);
stm.setNull(1, java.sql.Types.VARCHAR);
stm.setString(2, "theIdOftheProduct");
stm.setString(3, "theLotOftheProduct");

ResultSet rs = stm.executeQuery();
Run Code Online (Sandbox Code Playgroud)

上面的查询没有返回任何东西..我删除了paleta = ?,我得到了我想要的记录..如何SELECT * FROM INVENTORY WHERE paleta is null etc..使用查询参数定义查询?

Era*_*ran 5

你要做的就是写作SELECT * FROM INVENTORY WHERE paleta = NULL ...,这是行不通的.

由于您实际上是在搜索列中具有常量值的paleta行(恰好是这样NULL),因此可以消除第一个查询参数并显式检查null:

sq = "SELECT * FROM INVENTORY WHERE paleta IS NULL AND product = ? AND lot = ?";

stm = c.prepareStatement(sq);
stm.setString(1, "theIdOftheProduct");
stm.setString(2, "theLotOftheProduct");
Run Code Online (Sandbox Code Playgroud)