私はsqliteデータベースを持つアンドロイドアプリを持っています。時々私は私のテーブルを更新するとき、私は次のエラーを取得:アンドロイドのsqlite制約が更新に失敗しました
error code 19: constraint failed android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
を私は外部キーを持っていないので、制約が失敗することができると私は、NULL値を挿入していないよこれは表示されません。
表:
"CREATE TABLE HIST (" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT," +
"CL TEXT UNIQUE, " +
"ACOUNT INTEGER DEFAULT 0, " +
"HS INTEGER DEFAULT 0," +
"EX INTEGER DEFAULT 0," +
"LU INTEGER NOT NULL DEFAULT 0," +
"LT REAL NOT NULL DEFAULT 0);";
更新コード:
SQLiteStatement updateTempStatement = db.compileStatement("UPDATE HIST " +
" SET LT=? WHERE _id=?");
Cursor c = null;
c = db.rawQuery(QUERY_SQL, new String[] { hs?"1":"0" });
Info[] result = null;
if (c.getCount() > 0) {
result = new Info[c.getCount()];
int i = 0;
int idInd = c.getColumnIndex("_id");
int cInd = c.getColumnIndex("CL");
int hsuInd = c.getColumnIndex("HSU");
int ltInd = c.getColumnIndex("LT");
db.beginTransaction();
try {
while (c.moveToNext()) {
result[i] = new Info(c.getString(cInd),
c.getFloat(hsuInd),
c.getFloat(ltInd));
updateTempStatement.bindDouble(1, result[i].getLt());
updateTempStatement.bindLong(2, c.getLong(idInd));
updateTempStatement.execute();
i = i + 1;
}
db.setTransactionSuccessful();
}
finally {
db.endTransaction();
}
}
c.close();
updateTempStatement.close();
例外がupdateTempStatement.execute();
のライン上にあります。
私が見る唯一の制約は"NOT NULL"
ですが、Info.getlt()
メソッドはfloatプリミティブを返すため、NULLにすることはできません。
他のアイデアはありますか?
プライマリキーを更新することはできません。 – Dhruvisha
@Dhruvisha私は主キーを更新していません。私の主キーは_idで、フィールドLTを更新しています。 – Ran
チェックフィールドLT。それはあなたが更新している本当の価値ですか? – Dhruvisha