我有一个由用户定义的 EditText 填充的数据库。所有编辑文本都不允许有空字段。我知道我可以通过几个简单的 if 语句来检查这一点:if myEditText.getText().toString().equals("") // display error
。不过,我更愿意利用这个机会温习一下 SQLite 和错误捕获(如我的 add 方法所示)。我将如何将下表中的列更改为NOT NULL
当用户尝试使用空字段添加/更新时生成/捕获错误?
我的数据库表:
db.execSQL("CREATE TABLE inventory (category TEXT, itemNum TEXT, quantity INTEGER, price REAL, image INTEGER, UNIQUE(category, itemNum) ON CONFLICT FAIL);");
我的添加方法:
... 充满ContentValues values
try{
db.getWritableDatabase().insertWithOnConflict(DatabaseHelper.TABLE_NAME, DatabaseHelper.CATEGORY, values, SQLiteDatabase.CONFLICT_FAIL);
fillItemNumbers();
}
catch(SQLiteConstraintException e)
{
Toast
.makeText(MyActivity.this, etItemNum.getText().toString() + " already exists in " + catSpinner.getSelectedItem().toString() +". Consider using Update.",Toast.LENGTH_LONG)
.show();
}
我的更新方法:
... 充满ContentValues values
String[] args = {catSpinner.getSelectedItem().toString(), etItemNum.getText().toString()};
int rowsAffected = db.getWritableDatabase().update(DatabaseHelper.TABLE_NAME, values, DatabaseHelper.CATEGORY + "=? AND " + DatabaseHelper.ITEM_NUMBER + "=?" , args);
更新:
我做了一些挖掘并想出了这个:
db.execSQL("CREATE TABLE inventory (category TEXT NOT NULL, itemNum TEXT NOT NULL, quantity INTEGER NOT NULL, price REAL NOT NULL, image INTEGER NOT NULL, UNIQUE(category, itemNum) ON CONFLICT FAIL);");
这就是我要找的吗?如果是这样,我如何利用它来发挥我的优势(见上文)?