首页 > 解决方案 > sqlite创建表列默认值不起作用

问题描述

我想执行一个 sqlite 查询,它返回某个列具有(空)值的行。我尝试了很多变化,例如

SELECT ContribId FROM stack_contrib_tab WHERE BatchId IS NULL
SELECT ContribId FROM stack_contrib_tab WHERE BatchId ISNULL

这些返回所有行,无论 BatchId 是否为空。感兴趣的行在 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

那也没有用。该字段仍显示 (null),并且查询的行为方式相同。然后我想,好吧,我将使用 0 而不是 NULL。所以我创建了这个领域

BatchId INTEGER DEFAULT 0

你猜对了。那也没有用。该列仍然显示(空)。然后我在某处读到您还必须将列设置为 NOT NULL 所以我尝试了

BatchId INTEGER DEFAULT 0 NOT NULL

现在我得到错误

org.sqlite.SQLiteException:[SQLITE_CONSTRAINT_NOTNULL] NOT NULL 约束失败(NOT NULL 约束失败:stack_contrib_tab.BatchId)

我究竟做错了什么?

更新:我成功地将 BatchId 设置为 0,而不是 null。该错误发生在稍后插入期间,而不是像我想象的那样在创建表时发生。

标签: sqlsqlite

解决方案


推荐阅读