2010-11-23 3 views
0

SQLカーソルを使用するカスタムアダプタでリストビューを使用しています。私のリストビューにアイテムを追加すると、そのアイテムは自分のsqlite3データベースに追加され、リストビューが更新されます。AndroidのSQLite3のプライマリキーを適用する問題

私の1つの問題は、重複した項目を追加することができ、アプリケーションで重複を追加できるようにしたくないということです。

私のデータベース(itemNumber)にプライマリキーを追加しましたが、データベースはこれを強制していないようです。ここで私は自分のデータベースを作成する方法である:私は1は私のリストビューに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)" +");"; 

誰でも知っていますか?

ありがとうございます!


EDIT:

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)" +");"; 

EDIT:


これは私がデータベースに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

あなたの主キーは、2つのフィールドで構成されてい:_idおよびitemNumber。つまり、重複したitemNumberは制約を実施するのに十分ではありません。重複は、同じ_id AND itemNumberを持つ項目になります。このようなCREATE文を変更することができます

PRIMARY KEY(_id), UNIQUE(itemNumber) 

UNIQUE制約で重複する項目番号が許可されませんでした。

+0

申し訳ありませんが、投稿コードの主キーに_idを含めることを意味しませんでした。 _idをプライマリキーとして削除すると、重複する値を追加できます。または、アイテム番号を一意にすると...上の更新を参照してください。 – littleK

+0

アイテム番号はどのように生成しますか?重複していることは確かですか? – pablochan

+0

数値はWebサービスから返されます。上の2番目の編集を見ると、データベースに番号を追加する方法がわかります。上記のメソッドでは、itemNumberが何であるかを示すprintステートメントを追加して、それらが重複していることを100%示しています... – littleK

関連する問題