SQLite使用UNIQUE列组合创建表

时间:2012-03-29 14:27:31

标签: android sqlite primary-key unique

我查看过几个网站上的任何有用的文档,并且已经空了。来自官方网站的流程图也可能是希腊语,我在本网站上的其他相关帖子中尝试的示例让我犯了错误。我正在编写一个简单的应用程序来将用户输入放在数据库中,但我需要 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“;”:语法错误:CREATE TABLE库存(类别TEXT,itemNum TEXT,数量INTEGER,价格REAL,图像INTEGER,CONSTRAINT unq UNIQUE(category,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();            
}

1 个答案:

答案 0 :(得分:2)

您的括号不匹配。 )之后应该有另一个FAIL

一旦对其进行了排序,就可以捕获违反约束时发生的异常。

try {
    // insert new data
} catch (SQLiteConstraintException e) {
    Toast.makeText(context, 
                   "The combination of A and B must be unique",
                   Toast.LENGTH_LONG).show();
}