我有一个带有使用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约束不允许重复的项目编号。