如何使用SQLiteDatabase的update()方法将表中一列设为另一列的值?
解决SQLiteDatabase update()方法实现列赋值的问题
我懂你现在的困扰——想用SQLiteDatabase的update()方法把columnA的值设为columnB的值,但试了半天没搞成对吧?
首先得明确一个核心点:你绝对不能把columnA = columnB这个赋值逻辑放在ContentValues里。为啥?因为ContentValues本质是用来存静态常量值的(比如固定字符串、数字、布尔值这类),它会把你传入的值当成字面量处理。要是你硬把columnB塞进去当值,最终执行的SQL会变成UPDATE coolTable SET columnA = 'columnB';——也就是把columnA设成了字符串"columnB",而不是columnB列里的实际数据,这完全不是你想要的结果。
那正确的做法是什么呢?其实超简单,直接用execSQL()方法执行你原本写好的SQL语句就行:
// 获取你的数据库实例 SQLiteDatabase db = getWritableDatabase(); // 执行完整的UPDATE语句 db.execSQL("UPDATE coolTable SET columnA = columnB;");
如果需要添加WHERE条件(比如只更新特定行),还可以用带占位符的版本,避免SQL注入问题:
// 示例:只更新id为123的行 db.execSQL("UPDATE coolTable SET columnA = columnB WHERE id = ?;", new Object[]{123});
当然,如果你纠结一定要用update()相关方法,Android从API 11开始有个updateWithOnConflict(),但它依然依赖ContentValues传值,还是没法直接实现列之间的赋值。相比之下,直接执行原生SQL语句是最直接高效的方式。
内容的提问来源于stack exchange,提问作者user2264210
相关产品推荐
相关产品推荐

