Android性能优化之SQLite

Android应用程序开发时经常要使用到数据库做本地存储,因此优化SQLite是优化程序性能的一个很重要的部分。
本文从以下3个方面说一下数据库的简单优化手段:
1.提前编译sql语句
2.事务
3.映射

一.提前编译sql语句
假设我们现在需要向数据库中插入若干条数据,我们当然可以这么写

String sql = "insert into student(id,name) values('1','zhangsan')";
db.exeSQL(sql);

好的,没有问题,那么当数据多的时候呢?貌似也没问题,使用stringbuilder将字符串拼接起来就行了:

    int i = 0;
    StringBuilder builder = new StringBuilder();
    bulider.append("insert into student(id,name) values(\"");
    int resetLength 
    for(String name: names) {
        bulider.setLength(resetLength);
        bulider.append(i++).append("\",\"").append(name).append("\")");
        db.exeSQL(bulider.toString());
    }

嗯,看起来没什么问题,可是有兴趣的朋友可以试一试,执行起来效率并不好,原因是什么呢?其实每次执行db.exeSQL的时候都会对sql语句进行编译(解析)过程,上述操作其实是做了n次编译,所以效率并不好,一种提升效率的方法是使用compileStatement让语句现在循环外面编译,这样就只需要进行一次编译即可。
代码如下:

SQLiteStatement stmt = db.compileStatement("insert into student(id,name) values(?,?)");
int i = 0;
for(String name: names) {
    stmt.clearBindings();
    stmt.bindString(1,i);
    stmt.bindString(2,name);
    stmt.executeInsert();
}

上述代码由于在循环外先进性了sql语句的编译,所以明显优化了很多。有兴趣的朋友可以试试。当然,上述写法还存在一个问题,就是sql语句以及固定地写在了statement里面,如果这个时候想要执行删除操作就显得不方便了,实际使用中推荐使用ContentValues来执行sql语句,不仅灵活,效率上也很好。

二.事务
事务这个概念相信接触过数据库的同学肯定不会陌生了,其实sqlite在执行添、删、改这类sql操作的时候会默认地开启一个事务,那么大家想想,开启事务是需要耗时的,上述操作如果循环执行1000次,那就进行了1000次的额外操作,效率自然不好,所以正确的做法是在进行大量的添、删、改操作时显示地加上开启事务语句,这样只进行了一次额外的操作,效率自然不可同日而语了。代码如下:

try {
    db.beginTransaction();
    SQLiteStatement stmt = db.compileStatement("insert into student(id,name) values(?,?)");
    int i = 0;
    for(String name: names) {
        stmt.clearBindings();
        stmt.bindString(1,i);
        stmt.bindString(2,name);
        stmt.executeInsert();
    }
    db.setTransactionSuccessful();
} catch(Exception e) {
    //do sth.
} finally {
    db.endTransaction();
}

上述优化的方法操作简单,见效快,使用范围广,对于大量sql操作都可以通过加上事务操作来进行性能优化。强力推荐!

三、映射
该优化方法相信大多数朋友都知道,就是在查询的时候只查询需要的列,这样可以避免不必要的查询,能够极大的优化效率。

好了,今天就说到这里。以上是我所知道的数据库优化的方法,相信还有很多不少优化数据库的方法,也希望大家多多交流,将性能优化进行到底~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值