【问题标题】:SQLite create table with UNIQUE combination of columnsSQLite 创建具有唯一列组合的表
【发布时间】:2013-12-12 01:21:47
【问题描述】:

我浏览了几个站点以获取任何有用的文档,但都没有找到任何有用的文档。来自官方网站的流程图也可能是希腊语,我从该网站上其他相关帖子中尝试的示例让我出错。我正在编写一个简单的应用程序来将用户输入放在数据库中,但是我需要 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 inventory (category TEXT, itemNum TEXT, quantity INTEGER, price REAL, image 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();            
}

【问题讨论】:

    标签: android sqlite primary-key unique


    【解决方案1】:

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

    排序后,您可以捕获违反约束时发生的异常。

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

    【讨论】:

    • 捂脸!我现在把我的程序员卡还给我,悄悄退到角落里闷闷不乐。
    • 对第二个问题有什么想法吗?我还需要一些方法来捕捉错误,让用户知道他们的输入有错误
    • 使用您的代码重新编辑了我的问题。数据库现在不允许重复条目,但没有吐司。
    • 确实:03-29 15:05:53.453: ERROR/Database(1142): Error inserting itemNum=TTA23457 image=7 quantity=6 category=Case price=99.99 03-29 15:05: 53.453:错误/数据库(1142):android.database.sqlite.SQLiteConstraintException:错误代码19:约束失败
    • 你试过insertWithOnConflictCONFLICT_FAIL 常量吗?
    猜你喜欢
    • 2021-11-20
    • 2014-01-06
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    相关资源
    最近更新 更多