编辑:与 a_horse_with_no_name 交谈我发现 SQLite 中的“IS”有点不同,允许使用“IS”比较 NULL和值:stackoverflow.com/a/9102445/1470058。这为我消除了很多困惑。谢谢:
IS 和 IS NOT 运算符的工作方式与 = 和 != 类似,除非其中一个或两个操作数为 NULL。在这种情况下,如果两个操作数都为 NULL,则 IS 运算符的计算结果为 1(真),而 IS NOT 运算符的计算结果为 0(假)。如果一个操作数为 NULL 而另一个不是,则 IS 运算符的计算结果为 0(假)并且 IS NOT 运算符为 1(真)。IS 或 IS NOT 表达式不可能计算为 NULL。运算符 IS 和 IS NOT 与 = 具有相同的优先级。
我对 SQLite 中的关键字“IS”感到困惑。
我正在做一个需要我使用 Java 准备好的语句的项目。我遇到了两种类型的 WHERE 子句:
SELECT * FROM table WHERE column = ?
和
SELECT * FROM table WHERE column IS NULL
我的问题是等号“=”或“IS”这个词之间有什么区别吗?Google 搜索显示,大多数人使用 = 进行值比较,使用 IS 与 null 进行比较。但是我尝试了一些我自己的 SQLite 查询。
- “IS”将按预期返回“ column IS NULL ”和“ column IS value ”的结果。
- “=”将按预期返回“ column = value ”的结果,但不会返回“ column = NULL ”的结果。
我的问题是我可以在这两种情况下都使用“IS”而不会产生意外结果吗?我想为单个查询制作一个准备好的语句,该查询对列的约束可能为空,也可能不为空。我希望我是有道理的。
为了简化我所说的一切,我是否可以使用以下 Java 代码而不会因使用“IS”而产生意外影响:
private static final String queryProjectSql = "SELECT * FROM fields WHERE project IS ?";
// later in a method
sqlStatement = connection.prepareStatement(queryProjectSql);
sqlStatement.setString(1, project); //Project may be a String or null
谢谢你