当前位置: 首页 > 面试题库 >

SQLiteDatabase:仅在值不存在时插入(不通过原始SQL命令)

阴元青
2023-03-14
问题内容

我知道有一条SQL命令是这样的:IF NOT EXISTS,但是由于Android的SQLiteDatabase类有一些不错的方法,我想知道是否可以通过方法插入不存在的值。

目前,我正在用它来插入一个String

public long insertString(String key, String value) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(key, value);
    return db.insert(DATABASE_TABLE, null, initialValues);
}

db是的一个实例SQLiteDatabase。)

我尝试了该方法,insertOrThrow()而不是insert(),但它似乎与相同insert()。也就是说,如果该值已在行中,则将其再次插入,因此该行现在具有两个具有相同值的值。


问题答案:

SQLiteDatabase:仅在值不存在时插入(不通过原始SQL命令)

由于您不想使用原始查询,因此可以在插入之前实现这一点,只需创建一些函数来测试数据库中是否已存在值。它可以返回boolean(或int),如果返回false,则将执行插入查询。

一个小例子:

public int getCount() {
    Cursor c = null;
    try {
        db = Dbhelper.getReadableDatabase();
        String query = "select count(*) from TableName where name = ?";
        c = db.rawQuery(query, new String[] {name});
        if (c.moveToFirst()) {
            return c.getInt(0);
        }
        return 0;
    }
    finally {
        if (c != null) {
            c.close();
        }
        if (db != null) {
            db.close();
        }
    }
}

if (getCount() == 0) {
   //perform inserting
}

如果该值已在行中,则将其再次插入,因此该行现在具有两个具有相同值的值。

这可以通过使用适当的约束来解决,该约束不允许您插入重复项。检查一下:

  • SQLite中的约束


 类似资料:
  • 我有一个我认为是完全琐碎的查询-插入值到一个表中,如果一个值与匹配的ID不存在: 我在where语句周围得到一个错误。为什么?我如何实现我的目标?

  • 问题内容: 这个问题已经在这里有了答案 : 检查是否存在一行,否则插入 (11个答案) MySQL条件插入 (12个答案) 6年前关闭。 我想运行一组查询以将一些数据插入SQL表中,但前提是要满足满足某些条件的记录。该表有4个字段:(主要),和 我在查询3个字段:,和。 所以我的查询将是这样的: 因此,我只想在与和匹配的记录尚不存在时插入数据。如果上面的方法是正确的,那么我就觉得这是一种效率很低的

  • 问题内容: 我在使用SQL查询时遇到问题。如果同一行尚不存在,我需要插入一行。这是我到目前为止的内容: 我对sql不太熟悉,尤其是不存在的语法,因此在执行时会出现以下错误: ORA-06550:第37行,第11列:PLS-00103:在预期以下情况之一时遇到了符号“ INSERT”: 然后和或 用“ then”符号代替“ INSERT”继续。 following: the following: 问

  • 问题内容: 我有以下查询要插入到表中 得到消息 消息4860,级别16,状态1,行1 无法批量加载。文件“ c:\ Type.txt”不存在。 该文件显然在那里。我可能会忽略什么? 问题答案: 看一下: 无法批量加载。文件“ c:\data.txt”不存在 该文件在SQL Server的驱动器上吗? SQL BULK INSERT等始终只能与SQL Server计算机上的本地驱动器一起使用。您的S

  • 我有一个表,有多条记录具有相同的ID但不同的值。我想从其他表复制记录到这个表。如果记录为空,我想更新到最小位置,或者如果值不存在,插入到下一个位置。 这是我的目标表: ID|职位|价值 1 | 1 | A 2 | 1 | B 2 | 2 |空 2 | 3 |空 2 | 4 | C 3 | 1 | A 4 | 1 | D 4 | 2 | B 源表: ID |值 1 | C 2|N 3 | B 4 |

  • 问题内容: 我在控制器的函数中。 因此,从表单中,我得到了一个变量的值,说: 然后,我需要在WHERE语句中嵌入该变量(即它的值)。如果我对值进行硬编码,它将带来正确的结果,但是我已经尝试了各种方法来插入该变量而没有成功。好吧,假设我设法使用了该变量,那么我将不得不研究绑定以避免SQL注入,但是到目前为止,我要说的是,看看该变量是否可以在查询中使用。 我已经试过了,双引号,串联。$ vx。,花括号