Android SQLite3如何在settings.db中追加值而非替换原有值?
How to Append a Value to an Existing Record in Android's settings.db Secure Table Without Manual Full Value Input
当然可以不用手动输入完整的旧值+新值来实现追加!你需要利用SQLite的字符串拼接功能来更新现有记录,而不是直接替换或者插入新记录——这正是你之前操作没达到预期的原因。
正确的SQL更新命令
针对你的场景,直接用这条UPDATE语句就可以自动完成追加:
UPDATE secure SET value = value || ':a3' WHERE name = 'emp';
这里的||是SQLite里的字符串拼接操作符(Android的settings.db底层就是SQLite),它会自动把当前name='emp'对应的value值(也就是a1:a2)和:a3拼接在一起,最终得到你想要的a1:a2:a3。
为什么你之前的命令没效果?
- 你用的
UPDATE secure SET value='a3' where name='emp'是直接覆盖原有值,完全没有做拼接操作,所以旧值会被彻底替换成a3。 INSERT INTO secure (name, value) VALUES('emp','a3')会尝试新增一条记录,但secure表的name字段通常带有唯一约束,这条语句要么报错(因为已有同名记录),要么新增一条重复name的记录(如果没有约束),完全达不到修改原有值的目的。
额外的实用提示
- 权限问题:修改
settings.db通常需要设备拥有root权限,你可以通过ADB shell进入已root的设备来执行这些SQL命令。 - 先备份再操作:为了避免误操作搞乱系统设置,建议先备份数据库:
adb pull /data/data/com.android.providers.settings/databases/settings.db ./settings_backup.db
- 验证结果:执行完更新后,用这条查询语句确认是否成功:
SELECT value FROM secure WHERE name = 'emp';
返回的结果应该就是a1:a2:a3啦。
内容的提问来源于stack exchange,提问作者Blak RUSH
相关产品推荐
相关产品推荐

