FAQ_21 sqlite exception: close() was never explicitly called on database

经常与数据库打交道的 frend 们,估计肯定遇到这样的错误提示:


close() was never explicitly called on database ××××××××××××××××××


这种错误提示,不会导致程序崩溃,至少我没有遇到。


这个错误来源:

framworks/base/core/java/android/database/sqlite/SQLiteDatabase.java

    @Override
    protected void finalize() {
        if (isOpen()) {
            Log.e(TAG, "close() was never explicitly called on database '" +
                    mPath + "' ", mStackTrace);
            closeClosable();
            onAllReferencesReleased();
        }
    }

我的代码报了这个错误,我感觉很郁闷,因为我的确是 close 了!!


             DatabaseHelper dbHelper = new DatabaseHelper(context);
             SQLiteDatabase db = dbHelper.getWritableDatabase();

              if (db != null && db.isOpen()) {
                  db.close();
              }

             if (dbHelper != null) {
               dbHelper.close();
             }


最后发现,在代码里面,有:


if(isDate) {
    //************
    return;
}

所以须将 close 放到这个判断的 return 之前一份,因为 isDate == true,进入这个语句,程序就不会往下执行,那麽还没有 close,就会包错。


这样就没有错误了。









评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值