android SQLite :close() was never explicitly called on database 'XXXXXX'

今天在做android项目的时候遇到了一个异常:
这里写图片描述
记录一下解决方案,方便今后自我查询,同时若还有其他解决方案,请伙伴们提出宝贵意见,一起学习。。。。。。
解决方案一:DBhelper类继承SQLiteOpenHelper类。做一个静态引用,确保在任何时候只存在一个DBhelper实例,代码如下:

public class DBhelper extends SQLiteOpenHelper {
//数据库名
private static final String DATABASE_NAME_STRING = "xxxxxx.db";
//数据库版本
private static final int DATABASE_VERSION = 1;
private static DBhelper mDBhelper;

public static DBhelper getInstance(Context context){
if(null == mDBhelper){
    mDBhelper = new DBhelper(context.getApplicationContext());
        }
        return mDBhelper;
    }
public DBhelper(Context context){
    super(context,DATABASE_NAME_STRING,null,DATABASE_VERSION);
    }
    。。。。。//数据库的其他操作

在创建数据库的activity或者自定义封装类中通过调用getInstance()来得到DBhelper实例。

//在需要创建的java类中声明
private DBhelper helper;
private SQLiteDatabase db;
//在需要创建的方法中调用
if(null == db){
    helper = DBhelper.getInstance(context);
    db = helper.getWritableDatabase();
        }

解决方案二:
1、在DBhelper即Database Adapter中添加close函数

   public void close() {
        if (mDbHelper != null) {
        mDbHelper.close();
        }
    }

2、复写activity的onDestroy函数,在onDestroy中关闭数据库即可

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (helper != null) {
            helper .close();
        }
    }

希望此两个方案也能给遇到相同问题的伙伴提供一些思路,仅供参考。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值