android room数据库增加字段注意事项

最近将一个老数据库中的表增加了一个字段,原本想这个字段插入数据一定是非空的,结果悲剧了,等了几天后bug数越来越多,连夜修改发版,

一开始语句如下:

private const val ALTER_TABLE_NAME_VERSION_NAME =
"ALTER TABLE {DemoTable.TABLE_NAME} ADD COLUMN {DemoTable.FIELD_VERSION_NAME} TEXT NOT NULL"

如果新用户,肯定没问题,但是老用户,通过升级数据库,就会报插入不了这个字段,crash,因为这个字段不可空,所以总结:

如果拿不准的字段或者正常的字段都采用可空,修改上面插入语句为如下:

修改方法1:

private const val EMPTYSTR = "-1"

private const val ALTER_TABLE_NAME_VERSION_NAME =
"ALTER TABLE {DemoTable.TABLE_NAME} ADD COLUMN {DemoTable.FIELD_VERSION_NAME} TEXT NOT NULL default $EMPTYSTR"

因为插入空字符串是不生效的,所以需要插入一个字符串,这样也避免了从数据库中获取的值是null。

修改方法2:

private const val ALTER_TABLE_NAME_VERSION_NAME =
"ALTER TABLE {DemoTable.TABLE_NAME} ADD COLUMN {DemoTable.FIELD_VERSION_NAME} TEXT default NULL"

在这里允许为空,那么获取值的时候要加上判空

好了,又可以开心玩耍了。

相关推荐
恋猫de小郭3 小时前
2026 Flutter VS React Native ,同时在 AI 时代 VS Native 开发,你没见过的版本
android·前端·flutter
冬奇Lab4 小时前
PowerManagerService(上):电源状态与WakeLock管理
android·源码阅读
NineData8 小时前
NineData智能数据管理平台新功能发布|2026年1-2月
数据库·sql·数据分析
IvorySQL9 小时前
双星闪耀温哥华:IvorySQL 社区两项议题入选 PGConf.dev 2026
数据库·postgresql·开源
BoomHe10 小时前
Now in Android 架构模式全面分析
android·android jetpack
ma_king12 小时前
入门 java 和 数据库
java·数据库·后端
jiayou6415 小时前
KingbaseES 实战:审计追踪配置与运维实践
数据库
二流小码农17 小时前
鸿蒙开发:上传一张参考图片便可实现页面功能
android·ios·harmonyos
鹏程十八少17 小时前
4.Android 30分钟手写一个简单版shadow, 从零理解shadow插件化零反射插件化原理
android·前端·面试
Kapaseker17 小时前
一杯美式搞定 Kotlin 空安全
android·kotlin