android - SQLite 创建具有唯一列组合的表

标签 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 ";": 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/

相关文章:

java - 如何从 RecyclerView Adapter 中的 Sharedpreferences 获取数据并传递到下一个 fragment

java - 以示例应用程序为例并添加 SQLCipher 不起作用

sql-server - 具有自动增量的自定义主键生成

sql-server - 随时随地的新唯一标识符

mongodb - 为什么我应该在 MongoDB 中保留默认的 _id?

java - Android 媒体记录器 : Getting 3GP instead of MPEG4

android - 如何使用 Android 应用程序从 sqlite 中的 Assets 文件夹将表从一个数据库复制到另一个数据库

android - 对话框 fragment 问题 : onCreateDialog not called; can't get back key press

sqlite SELECT在查询列中与该列同名的值时返回所有记录

android - 获取 SQLite 空闲空间 %