我有一个带有使用SQL游标的自定义适配器的列表视图。将项目添加到列表视图时,该项目将添加到我的sqlite3数据库中,并且列表视图将刷新。

我的一个问题是我能够添加重复项,并且我不希望我的应用程序允许添加重复项。

我已经在数据库中添加了一个主键(在itemNumber上),但是数据库似乎没有对此进行强制。这是我创建数据库的方式:

private static final String DB_CREATE_MASTER = "CREATE TABLE "
            + "MyTable"
            + " (_id INTEGER, itemNumber TEXT,"
            + "itemPlace TEXT," + "itemTimeTEXT,"
            + "itemCode INTEGER,"
            + "dbdatestamp TEXT" + "PRIMARY KEY(itemNumber)" +");";


有谁知道为什么我可以在列表视图中添加多个重复的itemNumber?

谢谢!



编辑:

private static final String DB_CREATE_MASTER = "CREATE TABLE "
            + "MyTable"
            + " (_id INTEGER PRIMARY KEY, itemNumber TEXT,"
            + "itemPlace TEXT," + "itemTimeTEXT,"
            + "itemCode INTEGER,"
            + "dbdatestamp TEXT" + "UNIQUE(itemNumber)" +");";


编辑:



这是我将itemNumber添加到数据库的方式:

values.put("itemNumber", myClass.itemNumber);
values.put("itemName", myClass.itemName);
values.put("itemTime", myClass.itemTime);
values.put("dbdatestamp", "03/01/1960 08:55");
this.db.insert(MY_TABLE, null, values);

最佳答案

您的主键包含2个字段:_id和itemNumber。这意味着重复的itemNumber不足以强制执行约束。重复项将是具有相同_id AND itemNumber的项目。您可以像这样更改CREATE语句

PRIMARY KEY(_id), UNIQUE(itemNumber)


UNIQUE约束不允许重复的项目编号。

10-07 16:13