最近将一个老数据库中的表增加了一个字段,原本想这个字段插入数据一定是非空的,结果悲剧了,等了几天后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"
在这里允许为空,那么获取值的时候要加上判空。
好了,又可以开心玩耍了。