我想执行一个sqlite查询,该查询返回某列具有(空)值的行。我尝试了许多变体,例如
SELECT ContribId FROM stack_contrib_tab WHERE BatchId IS NULL
SELECT ContribId FROM stack_contrib_tab WHERE BatchId ISNULL
这些返回所有行,无论BatchId是否为null。感兴趣的行在DbVisualizer列中显示“(null)”。所以我以为列可能真的是空的,所以我尝试了
SELECT ContribId FROM stack_contrib_tab WHERE BatchId = ''
SELECT ContribId FROM stack_contrib_tab WHERE BatchId = ""
SELECT ContribId FROM stack_contrib_tab WHERE BatchId = '""'
这些没有导致错误,但也没有结果集。然后我想也许是字面上的'(null)',所以我尝试了
SELECT ContribId FROM stack_contrib_tab WHERE BatchId = '(null)'
这也导致结果集为空。然后我想也许我会强制默认值为null,所以我创建了这样的表列:
BatchId DEFAULT NULL
那也不起作用。该字段仍然显示(空),查询的行为方式相同。然后我想,好的,我将使用0而不是NULL。所以我创建了类似
的字段BatchId INTEGER DEFAULT 0
你猜对了。那也不起作用。该列仍显示(空)。然后我读到某个地方,您也必须将列设置为NOT NULL,所以我尝试了
BatchId INTEGER DEFAULT 0 NOT NULL
现在我得到了错误
org.sqlite.SQLiteException:[SQLITE_CONSTRAINT_NOTNULL] A NOT NULL 约束失败(NOT NULL约束失败: stack_contrib_tab.BatchId)
我在做什么错了?
更新:我成功将BatchId设置为0,而不是null。该错误是稍后在插入过程中发生的,而不是我想象的那样在创建表时发生的。