【发布时间】: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 我一直在查看文档并为此工作了几天。所以图表肯定不适合我。