我浏览了多个站点以查找任何有用的文档,但都一无所获。官方网站上的流程图也可能是希腊文的,我从该网站上的其他相关帖子中尝试的示例让我出错。我正在编写一个简单的应用程序来将用户输入放入数据库中,但是我需要2 列的组合是唯一的。据我所见,这可以使用 UNIQUE 或 PRIMARY KEY 来完成。 我还需要一些方法来捕获错误,以便让用户知道他们的输入有误。我知道我可以在 Java 端很容易地做到这一点,但我不想在每个建议的插入时循环遍历表。
这是我目前所拥有的:
db.execSQL("CREATE TABLE inventory (category TEXT, itemNum TEXT, quantity INTEGER, price REAL, image INTEGER, UNIQUE(category, itemNum) ON CONFLICT FAIL;");
在我添加 UNIQUE 之前,表构建正确......
抛出了: ERROR/SQLiteOpenHelper(1037): android.database.sqlite.SQLiteException: near ";": syntax error: CREATE TABLE inventory (category TEXT, itemNum TEXT, quantity INTEGER, price REAL, image INTEGER, CONSTRAINT unq UNIQUE(类别,itemNum)冲突失败;
编辑:
...用用户输入填充ContentValues 值。
try{
db.getWritableDatabase().insert(DatabaseHelper.TABLE_NAME, DatabaseHelper.CATEGORY, values);
fillItemNumbers(); // Updates screen
}
catch(SQLiteConstraintException e)
{
Toast
.makeText(this, "User error",Toast.LENGTH_LONG)
.show();
}
最佳答案
您的括号不匹配。 FAIL
之后应该有另一个)
。
排序后,您可以捕获违反约束时发生的异常。
try {
// insert new data
} catch (SQLiteConstraintException e) {
Toast.makeText(context,
"The combination of A and B must be unique",
Toast.LENGTH_LONG).show();
}
关于android - SQLite 创建具有唯一列组合的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9927394/