知道了这些,你对android sqlite数据库的运用更加的得心应手

         安卓本地的数据库sqlite对于咱们数据本地存储有很大的帮助,但是使用不当,也会出现慢卡的现象,下面由我分享几点我自己碰到的几个问题并给出相应的方案和思路!

问题1:数据库泄露

A SQLiteConnection object for database '/storage/sdcard0/testdemo.db' was leaked!  Please fix your application to end transactions in progress properly and to close the database when it is no longer needed.

这个就是数据库打开以后,由于某种原因没有关上,但打开的界面又被销毁了,系统发现就会提示,数据库泄露了:

解决办法:对于查询的Cursor指针,使用完了在最后关闭如下:

Cursor cursor=null;
try{
     cursor= db.rawQuery(queryStr, new String[] { id});
      //做你想做的操作
}catch(Exceptione){
}finally{
    if(null!=cursor){
         cursor.close();
     }
}


对Database对象,最好在Activity或者Fragment结束时关闭它(此为单个为例)如下:

        

 @Override
  publicvoid onDestroy() {//private SQLiteDatabase db=null;
           super.onDestroy();
           if(null!=db){
               db.close();
            }
   }

问题2:对于一条一条插入数据进数据库如果量大时,数据库就会很慢,很耗时。

我试了一下,大概500块数据,一条一条插入到数据库,大概就4秒以上,对于程序来讲太慢了,也接受不了!那怎么办呢?我们得使用一个事务的方式,就是数据库事务开始,然后开始大量的插入数据,最后把这么多操作当作一个事务,提交上去,这样就很快了!例子代码如下:

         

publicvoid insertPersonList(SQLiteDatabase db, List<PersonInfos> aList) {
                   if(null==db|| false==db.isOpen() || null==aList || aList.isEmpty())return;
                   db.beginTransaction();
                   try{
                            for(PersonInfosaPerson:aList){
                                     StringwhereContent =" id= ? ";
                                      db.delete(PERSON _TABLE,whereContent, new String[] {aPerson.getId()});
                                     ContentValuesvalues=getPersonContentValues(aPerson);
                                     db.insert(PERSON_TABLE,null, values);
                            }
                            db.setTransactionSuccessful();
                   }catch(Exceptione){
                            e.printStackTrace();
                   }finally{
                            db.endTransaction();
                   }
         }

问题3:当在一个大列表中需要使用到中英文排序甚至分类,每次使用都需要中文转英文加上排序算法都很复杂和耗时!

这时就可以使用sqlite数据库解决这个问题,先从网络下载数据,然后把中文转成英语,当作一个数据保存下来,然后在以后的使用中查询一下就好了!如下:

select * from PERSON_TABLE where ... OrderBy SORT_LETTERS;


好了,关于数据库遇到的问题,我暂时想到这么多,以后碰到再更新吧,如果有那位兄弟知道的更多,麻烦告诉下,在这里先谢谢了!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值