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"

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

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

相关推荐
Access开发易登软件1 分钟前
Access 怎么做前后端分离?用 Web API 读写 SQL Server
前端·数据库·人工智能·microsoft·excel·access
Juicedata5 分钟前
腾讯云 x JuiceFS:基于 FoundationDB 的企业级统一存储实践
数据库·人工智能·科技·云计算·腾讯云
总捣什么乱114 分钟前
MySQL MySQL是怎么保证主备一致的?
android·mysql·adb
小罗水15 分钟前
第13章 Redis 缓存、幂等锁与任务状态
数据库·redis·缓存
SelectDB技术团队25 分钟前
当 PostgreSQL 面临性能瓶颈:80TB 电商业务迁移至 Apache Doris 的实践思考
数据库·postgresql·apache
心念枕惊28 分钟前
新写了个直播录制工具,可录制抖音快手斗鱼直播
运维·服务器·数据库
逐米时代1 小时前
向量数据库选型——Chroma、Qdrant、Milvus到底怎么选
数据库·milvus
zzm6281 小时前
精读 HinDroid:基于异构信息网络的安卓恶意软件检测
android
段一凡-华北理工大学1 小时前
AI推动工业智能化转型~系列文章05:特征工程:工业 AI 的第一生产力
数据库·人工智能·分布式·搜索引擎·特征工程·高炉智能化
weixin_440784111 小时前
Android基础知识汇总
android·java·android studio