android - 哪个 SQLite 语句可以产生指示重复条目的结果?安卓

标签 android sqlite insert return-value exists

对于我的应用程序,我尝试添加条目而不包含重复条目,如果有重复条目,请通知用户并让他重试。使用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 以获得唯一对,有人告诉我这是最简单的。如果有人可以纠正这些方法和/或对它们发表评论,我们将不胜感激。

谢谢

最佳答案

这就是我理解您想要的:拥有一个表Database_Table(如果我可以这么说,不是最具描述性的名称),它永远不允许在两行中输入相同的纬度和经度对。

如果正确,您需要声明包含纬度和经度列的主键或唯一键。如果这样做,则任何插入同一对的尝试都会引发异常,您可以捕获该异常并通知用户。使用这种技术,您将不需要在查询中使用 WHERE NOT EXISTS (...) 子句,只需执行简单的 INSERT,然后让 SQLite 警告您违反 UNIQUEness 约束的情况。

如果您的表已经存在,则可以使用 SQL 命令 CREATE INDEX 最轻松地添加键。由于任何表上可能只有一个主键,因此如果表上已有主键,则需要使用唯一键来实现此目的。

您将使用的 CREATE INDEX 语句的最简单形式是:

CREATE UNIQUE INDEX lat_long_unique ON Database_Table(latitude, longitude)

关于android - 哪个 SQLite 语句可以产生指示重复条目的结果?安卓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1634752/

相关文章:

android - 一个 Activity 或 fragment 必须有一个单独的加载程序来执行每个数据库操作的类型吗?

mysql - 更新表A,用一个SQL命令插入表B?

oracle - 在 Oracle 中发出 COMMIT 之前 INSERT 是如何工作的

android - 为一个应用程序发送推送通知

android - 如何像Android的Toast一样在Blackberry中显示快速消息?

java - 从数据库获取数据与从 HashMap 获取数据

SQLite 错误 : no such column:

sql-server - SSIS - 插入新行、更新行

java - Android Studio 支持@IntRange 和@FloatRange 等注解,为什么没有@DoubleRange 注解

android - 我可以在 viewpager 中的内容之外向 FragmentActivity 添加 fragment 吗?