我想插入一条记录,除非它存在,然后如果它的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 之外的比较和决策要快得多。