Java Android SQLite3强制主键的问题

Java Android SQLite3强制主键的问题,java,android,database,sqlite,primary-key,Java,Android,Database,Sqlite,Primary Key,我有一个带有使用sql游标的自定义适配器的listview。当我将项目添加到我的listview时,该项目将添加到我的sqlite3数据库中,并且listview将刷新 我的一个问题是,我可以添加重复的项目,我不希望我的应用程序允许添加重复的项目 我已经向我的数据库添加了一个主键(在itemNumber上),但是数据库似乎没有强制执行这一点。以下是我创建数据库的方法: private static final String DB_CREATE_MASTER = "CREATE TABLE "

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

我的一个问题是,我可以添加重复的项目,我不希望我的应用程序允许添加重复的项目

我已经向我的数据库添加了一个主键(在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)" +");";
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);
有人知道为什么我可以在listview中添加超过1个重复的itemNumber吗

谢谢


编辑:

编辑:


以下是我将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)" +");";
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);

主键由两个字段组成:\ id和itemNumber。这意味着重复的itemNumber不足以强制执行约束。重复项将是具有相同_id和itemNumber的项。您可以像这样更改CREATE语句

PRIMARY KEY(_id), UNIQUE(itemNumber)

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

对不起,我不是想在我发布的代码的主键中包含_id。当我删除_id作为主键,或者如果我使项目编号唯一,我仍然能够添加重复值…请参阅上面的更新..如何生成项目编号?您确定有重复的号码吗?这些号码是从web服务返回的。如果您查看我上面的第二次编辑,您可以看到我如何将数字添加到数据库中。在执行上述操作的方法中,我添加了一个print语句来显示itemNumber是什么,它100%地显示它们是重复的…当我查看表的架构时,它没有显示itemNumber是唯一的…嗯,这看起来很奇怪。我的点子快用完了。我想您可以在插入新项目之前检查是否已经有itemNumber,但这不是一个好的解决方案。