2011-08-05 30 views
0

私はよくある問題を抱えていますが、いくつかの解決策を見てきましたが、このケースに合ったものは見ていません。SQLiteエラー:制約に失敗しました

私は次のように定義された一時テーブルを持っている:

public static final String GROUP_TABLE_CREATE = 
     "CREATE TEMP TABLE "+GROUP_TABLE_NAME+" (" 
     +GROUP_ID_COLUMN_NAME+" INTEGER PRIMARY KEY AUTOINCREMENT, " 
     +GROUP_GROUP_ID_COLUMN_NAME+" INTEGER NOT NULL UNIQUE, " 
     +GROUP_COLUMN_NAME+" VARCHAR(64) NOT NULL)"; 

テーブルが問題なく作成されます。

ContentValues contentValues = new ContentValues(); 
contentValues.put(WhereWolfOpenHelper.GROUP_GROUP_ID_COLUMN_NAME, groupID); 
contentValues.put(WhereWolfOpenHelper.GROUP_COLUMN_NAME, groupName); 
db.insert(WhereWolfOpenHelper.GROUP_TABLE_NAME, null, contentValues); 

そして私は次のエラーを取得する:私は、それに挿入し、それを挿入するために、次のクエリを使用するいくつかのデータをダウンロードし

08-05 08:52:37.791: ERROR/Database(847): Error inserting group_name=Friends group_id=2 
08-05 08:52:37.791: ERROR/Database(847): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed 

エラーが二回、とだけ表示されますデータベース内のデータは、Friendsという名前のグループです(さらに2つのエントリが必要です)。

私は問題なく動作する非常に似たコードを持つ別のテーブルを持っているので、私はそれがちょっと愚かな間違いだと推測しています。誰もがアイデアを持っていますか?

+0

どうしますか? – Pikaling

+0

hi vicki GROUP_GROUP_ID_COLUMN_NAMEのUNIQUE属性を削除しようとします。 –

答えて

0

テーブルスキームの何かが "間違っている"場合は、 "制約が失敗しました" 挿入したいデータが表示されているのを見て、これは何を意味するのですかNOT NULL制約はOKです。 この場合、値がとUNIQUEのGROUP_GROUP_ID_COLUMN_NAMEがすでに挿入されているという仮定が1つしかありません。

+0

私はユニークな制約を取り除き、問題の原因を明らかにしました。イテレータを増やすのを忘れて、同じ行を3回入れようとしていました!ご協力いただきありがとうございます – Pikaling

0

一時的なテーブルを目的に使用していますか?一時テーブルは、DB接続が閉じられると終了します。この場合、テーブルが作成され、挿入はどのテーブルにも対応しません。したがって、制約19は 'テーブルが見つかりません'に対応することができます

+0

はい私は一時的なテーブルを意図的に作成しています。データはそのデータが格納される直前に作成されます。 – Pikaling

0

insertメソッドではnull値を渡すべきではありません。空の文字列を渡します。

関連する問題