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"

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

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

相关推荐
9稳2 小时前
基于单片机的家庭安全系统设计
开发语言·网络·数据库·单片机·嵌入式硬件
2501_915918412 小时前
iOS App 测试方法,Xcode、TestFlight与克魔(KeyMob)等工具组合使用
android·macos·ios·小程序·uni-app·iphone·xcode
逍遥德2 小时前
Postgresql 系统表作用解释
数据库·后端·sql·postgresql
冬奇Lab2 小时前
Android 15 显示子系统深度解析(一):显示框架总览与SurfaceFlinger核心机制
android·性能优化
MonkeyKing_sunyuhua2 小时前
ES文档序号写错的问题的修复
java·数据库·elasticsearch
饱饱要坚持可持续发展观3 小时前
Liquibase preConditions 执行前判断详解
数据库·liquibase
代码煮茶君3 小时前
MySQL 数据库死锁及核心机制全解析
android·数据库·mysql
咕噜企业分发小米3 小时前
豆包大模型在药物研发中的知识检索效率如何?
java·开发语言·数据库
LaughingZhu3 小时前
Product Hunt 每日热榜 | 2026-01-20
数据库·人工智能·经验分享·神经网络·搜索引擎·chatgpt