在查询中使用set null的预准备语句不会返回任何记录

时间:2017-10-16 07:14:57

标签: 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();

以上查询没有返回任何内容..我删除了paleta = ?并获取了我想要的记录。如何使用查询参数定义SELECT * FROM INVENTORY WHERE paleta is null etc..之类的查询?< / p>

1 个答案:

答案 0 :(得分: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");