【发布时间】:2020-11-29 07:56:05
【问题描述】:
在 SQL (SQLite) 表中更新布尔列(即分类二进制 INTEGER 值)的标准方法是什么?
(这里的二进制意味着一个只取两个值的整数:0 和 1,因此问题标题中的引号)
给定一张桌子:
CREATE TABLE types (
id INTEGER NOT NULL PRIMARY KEY,
name TEXT,
enabled INTEGER DEFAULT 1)
以及可以具有启用/禁用状态并表示为两个列表的对象列表:
List<Long> idsEnabled = new ArrayList<>();
List<Long> idsDisabled = new ArrayList<>();
这是存储启用状态(即0 或1)的正确方法吗?
SQLiteDatabase db = dbHelper.getWritableDatabase();
// upd: NOT WORKING because rawQuery does NOT work for modifying data,
// must use execSQL
db.rawQuery("UPDATE types set enabled=1 where id in ("
+ TextUtils.join(",", idsEnabled) + ")", null);
db.rawQuery("UPDATE types set enabled=0 where id in ("
+ TextUtils.join(",", idsDisabled) + ")", null);
是否有更好、更高效的 OOTB 方法来执行此操作?我的假设是,一一更新每一行将是最坏的情况。
这个问题不一定是特定于 android 的,尽管如果有一些特定于 android 的 API 会有所帮助。
【问题讨论】:
标签: java android sqlite sql-update android-sqlite