【问题标题】:Inserting or Updating into SQLite but only updating if one of the values meets a condition [duplicate]插入或更新到 SQLite,但仅在其中一个值满足条件时才更新 [重复]
【发布时间】:2013-04-05 01:51:17
【问题描述】:

我想插入一条记录,除非它存在,然后如果它的COLUMN_GENERATION 值小于现有记录的值,我想更新该记录。我什至不确定如何构建查询,或者使用什么命令。

我这样设置我的数据库:

public static final String TABLE_SEARCH = "SearchTable";
public static final String COLUMN_OWNER = "Owner";
public static final String COLUMN_SPOUSE = "Spouse";
public static final String COLUMN_CHILD = "Child";
public static final String COLUMN_GENERATION = "Generations";

private static final String DATABASE_NAME = "searches.db";
private static final int DATABASE_VERSION = 1;

// Database creation sql statement
private static final String DATABASE_CREATE = "CREATE TABLE "
        + TABLE_SEARCH + "("
        + COLUMN_OWNER + " INTEGER PRIMARY KEY, "
        + COLUMN_SPOUSE + " INTEGER DEFAULT 0, "
        + COLUMN_CHILD + " INTEGER DEFAULT 0, "
        + COLUMN_GENERATION
        + " INTEGER DEFAULT 0);";

这是我现在使用的查询,它只是忽略了冲突的条目:

values.put(SearchDatabaseHelper.COLUMN_OWNER, personID);
values.put(SearchDatabaseHelper.COLUMN_SPOUSE, spouseID);
values.put(SearchDatabaseHelper.COLUMN_CHILD, childID);
values.put(SearchDatabaseHelper.COLUMN_GENERATION, gens);
long insertID = database.insertWithOnConflict(SearchDatabaseHelper.TABLE_SEARCH, null, values, SQLiteDatabase.CONFLICT_IGNORE);

我尝试使用查询来首先搜索数据库,然后根据需要插入或更新,但这确实很慢并且实际上不起作用。我一定会很感激这方面的帮助。

哇——作为一个重复的问题关闭了。没有真正的答案。我担心我的问题标题用词不当,所以人们只是略读了一下,并没有阅读我的问题。

似乎没有人注意到第一段中的关键短语:

“如果 COLUMN_GENERATION 的值小于现有记录的值,我想更新该记录。”

我可以插入/更新数据库。潜在的问题是,“是否可以使用我的主键进行单个查询来查看数据库中是否存在行,如果不存在,则插入,如果存在,则仅在存储的情况下更新其中一列的值高于输入的数据?"

我真的希望能够在一个 SQLite 调用中完成这一切,因为 SQLite 比在 SQLite 之外进行比较和决策要快得多。

【问题讨论】:

  • 还有:sqlite.org/lang_insert.html 都在里面!
  • 肯定和 INSERT IF NOT EXISTS ELSE UPDATE 不一样,因为我只想更新一列的新值是否低于现有值。
  • @Budius 我一直在查看文档并为此工作了几天。所以图表肯定不适合我。

标签: android sqlite


【解决方案1】:

从数据库中读取现有记录的生成。 如果它存在并且具有较低的代,则将其删除。 如果它不存在或具有较低的代,则插入新的。

各种INSERT OR XXX 命令仅适用于特定的常见情况;对于你的算法,你必须把它写出来。

只需正确编写命令并围绕它们包装一个事务,它就会运行得很快。

【讨论】:

    猜你喜欢
    • 2018-06-26
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    相关资源
    最近更新 更多