我在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' 约束的所有字段,即使我可能没有更新这些字段?
答案 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
感谢您的支持。