gpt4 book ai didi

android - 在 SQLITE Android 中模拟 ON DUPLICATE KEY UPDATE

转载 作者:太空宇宙 更新时间:2023-11-03 10:18:40 29 4
gpt4 key购买 nike

我正在尝试找到一种方法来从在 SQLite 中工作的 MySQL 获取 INSERT...ON DUPLICATE KEY UPDATE。问题是我目前的尝试总是失败,因为 SQLite 总是先删除该行,然后用新值和相同的主键插入它。当我现在在另一个表的这个主键上有一个外键约束 ON DELETE CASCADE 时,其他表中的条目总是被删除。

我尝试过的:

db.insertWithOnConflict(tableName, null, values, SQLiteDatabase.CONFLICT_REPLACE);
db.replace(tableName, null, values);

这两种方法都是先删除条目再重新插入。

是否有任何方法可以防止这种行为并只更新条目的值,除了主要值?


我基于答案的实现:

public long insertUpdate(int id, ContentValues values) {
if (!isOpen()) {
open();
}


ContentValues valuesToInsert = new ContentValues();
valuesToInsert.putAll(values);
valuesToInsert.put(indexKey, id);
long result = db.insertWithOnConflict(tableName, null, valuesToInsert, SQLiteDatabase.CONFLICT_IGNORE);
if (result == id) {
update(id, values);
}

return id;
}

最佳答案

我以前从未尝试过,但您能否先尝试使用 CONFLICT_FAIL 参数调用 insertWithOnConflict(),然后,如果它返回 failed id code ,然后为同一位置运行 update()

int result = insertWithOnConflict(YourDbHelperClass.tableName, null, values, SQLiteDatabase.CONFLICT_FAIL);
if (result == -1) update(tableName, values, YourDbHelperClass.rowId + "=?", new String[] { "x" }); //x being row number

只是一个想法。

关于android - 在 SQLITE Android 中模拟 ON DUPLICATE KEY UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29965521/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com