Для моего приложения я пытаюсь добавить записи без дублирующейся записи, и, если есть дубликат, уведомить пользователя и попросить его повторить попытку. Используя SQLite, о котором я очень мало знаю, я попробовал эти два способа и хочу знать, какой из них лучше, эффективнее или лучший способ его разработки?
Первый способ:
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 + ")");
Второй способ:
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;
Первый способ, либо вставлять, либо игнорировать значения, я проверяю, делая так, сохраняя количество строк в переменной перед вызовом, вызывая эту функцию, а затем проверяя ее результаты. Если результаты не выше, чем это было до вызова, вставка была проигнорирована, запросите у пользователя сообщение «значения существуют». (Я знаю, что это очень неряшливо, но отчаянные времена требуют отчаянных мер)
Второй способ, возвращает фактическое количество строк, которые соответствуют номерам, которые я хочу сохранить, если число вернулось больше 1, запросить у пользователя сообщение «значения существуют».
Я ходил взад и вперёд, пробуя разные способы, но я не знаю, как настроить SQLite для создания УНИКАЛЬНЫХ пар, что, как мне сказали, будет самым простым. Если кто-то сможет исправить любой из этих способов и / или прокомментировать их, это будет с благодарностью.
Спасибо