抛出SQLiteConstraintException的Android UPDATE语句:NOT NULL约束失败

时间:2018-02-15 06:02:19

标签: android sql-update

我在Android中的SQLite DB中为我的应用程序提供了一个表格。 E.g。

EMPLOYEE_DETAILS{
_ID      "INTEGER PRIMARY KEY AUTOINCREMENT",
NAME     "TEXT  NOT NULL",
SALARY   "INTEGER"
}

使用insert方法为所有3个值正确插入记录。现在我尝试使用特定ID的新值更新SALARY字段。我已经创建了仅包含SALARY字段的CONTENT VALUES对象。 喜欢 -

ContentValues cv = new ContentValues();
cv.put("SALARY",100000);
String[] arg = new String[1];
arg[0]="1"
db.update("EMPLOYEE_DETAILS", cv, "_ID=?",arg);

此更新语句抛出 -

"SQLiteConstraintException: NOT NULL constraint failed for NAME field"

即使表格在名称字段中已经有给定行的值,并且我在更新期间不在ContentValue中包含NAME字段。

我可以通过在CV中包含具有原始值的NAME字段来删除此例外,因为我不打算更改NAME字段,但问题是 - 这是正确的吗?

我是否需要在ContentValue中包含' not null' 约束的所有字段,即使我可能没有更新这些字段?

1 个答案:

答案 0 :(得分:0)

我找到了这个问题。 我上面提供的代码片段只是一个易于理解的示例。实际的逻辑比较复杂。

问题完全在于我的代码。我的流程到达逻辑的地方,我使用insert语句插入行而不是更新语句的目标代码。我已经纠正了我的逻辑,并确认更新语句正常工作,无需添加字段(非空约束)。

只需添加必填字段即可正常运行更新语句。

    SQLiteDatabase db = dbHelper.getWritableDatabase();        
    ContentValues cv;
    cv = new ContentValues();
    cv.put("NAME", "PRAMOD"); //NAME is of type "TEXT NOT NULL"
    cv.put("SALARY", 50000);
    db.insert("EMPLOYEE_DETAILS", null, cv);

    cv = new ContentValues();
    cv.put("SALARY", 70000);
    db.update("EMPLOYEE_DETAILS", cv, "_ID=?",new String[] {"1"});//this works as expected

感谢您的支持。