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"

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

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

相关推荐
行业研究员3 小时前
Agent Memory降低Token消耗原理解析
数据库·人工智能·oracle·腾讯云·智能体
yixun_gdas3 小时前
企业网站内容巡查的价值与方法:企业官网的合规与形象管理
数据库·内容运营
见闻小天地3 小时前
空调机房赛莱默B&G冷冻泵/冷却泵的核心技术特性分析
大数据·运维·数据库
辛迪聊物业数字化3 小时前
物业管理系统新手部署与实操指南
数据库·物联网·架构·系统架构
March.s3 小时前
MySQL 数据库原理与实战:从数据管理到 LAMP 建站全解
数据库·mysql
镜象科技3 小时前
中小学AI心理健康解决方案服务商怎么选?2026年选型参考
android·java·人工智能
脚踏实地,坚持不懈!4 小时前
从 AOSP 源码角度分析 Android 定位性能问题
android
字节跳动的猫4 小时前
LikeShop 种草社区模块二开:笔记发布、话题广场与商品挂载实现
数据结构·数据库
IvorySQL4 小时前
PostgreSQL 日报| PostgreSQL JDBC 安全更新(10 月 10 日)
数据库·postgresql·区块链
悟道子HD4 小时前
网络安全基本功——MySQL基础
android·mysql·web安全