SQLite 中的 NOT NULL 列和错误捕获

2024-05-22

我有一个由用户定义的 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);");

这就是我要找的吗?如果是这样,我如何利用它来发挥我的优势(见上文)?


我不确定您是否真的可以更改表的列定义。我知道您可以更改表本身,例如向表添加新列。如果您想要保留数据库中的大量数据,您可能需要一些技巧来修改数据库。

一种方法是创建新表并尝试将数据复制到新表,然后删除旧表并重命名新表。这不是最有效的方法,但它可以完成工作。

http://www.sqlite.org/lang_altertable.html http://www.sqlite.org/lang_altertable.html

EDIT

干得好

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);

EDIT 2尝试这个

CREATE TABLE inventory (category TEXT not null ON CONFLICT FAIL, itemNum TEXT not null ON CONFLICT FAIL, quantity INTEGER not null ON CONFLICT FAIL, price REAL not null ON CONFLICT FAIL, image INTEGER not null ON CONFLICT FAIL, UNIQUE(category, itemNum) ON CONFLICT FAIL);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLite 中的 NOT NULL 列和错误捕获 的相关文章

随机推荐