我有一个listview,其中包含一个使用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)" +");";
有谁知道我为什么能够在列表视图中添加多于1个重复的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);
答案 0 :(得分:1)
您的主键包含2个字段:_id和itemNumber。这意味着重复的itemNumber不足以强制执行约束。副本将是具有相同_id AND itemNumber的项目。您可以像这样更改CREATE语句
PRIMARY KEY(_id), UNIQUE(itemNumber)
UNIQUE约束不允许重复的项目编号。