Android SQLite3问题强制执行主键

时间:2010-11-23 17:18:09

标签: java android database sqlite primary-key

我有一个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);

1 个答案:

答案 0 :(得分:1)

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

PRIMARY KEY(_id), UNIQUE(itemNumber)

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