对于我的应用程序,我正在尝试添加条目而没有重复条目,如果有重复项,请通知用户并让他重试。使用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 以拥有 UNIQUE 对,有人告诉我这将是最简单的。如果有人可以纠正这些方式中的任何一种和/或对它们发表评论,那将不胜感激。
谢谢