私のアプリケーションでは、重複するエントリを持たずにエントリを追加しようとしています。重複している場合は、ユーザーに通知して再試行してもらいます。私はほとんど知らないSQLiteを使用して、これら2つの方法を試しましたが、どちらがより良い、より効率的、またはより良い開発方法であるかを知りたいですか?
最初の方法:
db.execSQL("INSERT INTO " + DatabaseHelper.DATABASE_TABLE +
"(LATITUDE, LONGITUDE, RATING) SELECT " + latitude + ", " + longitude + ", " + rating +
" WHERE NOT EXISTS (SELECT 1 FROM " + DatabaseHelper.DATABASE_TABLE +
" WHERE LATITUDE = " + latitude + " AND LONGITUDE = " + longitude + ")");
2番目の方法:
long id = -1;
try {
id = db.compileStatement(
"SELECT COUNT(*) FROM " + DatabaseHelper.DATABASE_TABLE
+ " WHERE LATITUDE = " + latitude
+ " AND LONGITUDE = " + longitude)
.simpleQueryForLong();
} catch (NullPointerException e) {
return -1;
}
return id;
最初の方法は、値を挿入するか無視するかです。そうすることでチェックし、呼び出しの前に行の行数を変数に格納し、その関数を呼び出して、その結果をチェックします。結果が呼び出し前よりも高くない場合、挿入は無視され、「値が存在します」というメッセージが表示されます。(非常にずさんな、私は知っていますが、絶望的な時代には必死の対策が必要です)
2番目の方法は、格納する数に一致する実際の行数を返します。返される数が1より大きい場合は、「値が存在します」というメッセージをユーザーに表示します。
私はさまざまな方法を試しながら行ったり来たりしていますが、SQLiteをセットアップしてUNIQUEペアを作成する方法がわかりません。これが最も簡単だと言われました。誰かがこれらの方法のいずれかを修正したり、コメントしたりできる場合は、それをいただければ幸いです。
ありがとう