SQLiteOpenHelper 崩溃Couldnt read row 0, col -1 from CursorWindow.

数据库table升级,加了一列,在onCreate和onUpgrade都加了相应column,版本号也升级了。结果发现部分升级安装的用户出现崩溃。崩溃信息如下

java.lang.IllegalStateException: Couldnt read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
     at android.database.CursorWindow.nativeGetString(Native Method)
     at android.database.CursorWindow.getString(CursorWindow.java:434)
     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:62)
     at android.database.CursorWrapper.getString(CursorWrapper.java:114) ....

定位到getColumnIndex(column) 返回值-1,即没找到列名

经过排查,发现是其他table的升级sql执行抛出了异常,客户端把它catch住了...然而android在抛出这个异常的时候同时把数据库关闭了,整个升级是个事务,没有升级成功。

教训:

1、getColumnIndex要加保护

2、不是所有的异常都catch,在debug的时候应该让它抛出来,便于早点发现问题

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值