【玩转SQLite系列】(五)SQLite数据库优化

【玩转SQLite系列】(五)SQLite数据库优化,第1张

概述转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53326323 本文出自【DylanAndroid的博客】 【玩转SQLite系列】文章目录 【玩转SQLite系列】(一)初识SQLite,重拾sql语句 【玩转SQLite系列】(二)SQLite创建和打开数据库的三种方式 【玩转SQLite系列】(三)通过sql语句 *** 作SQ

转载请注明出处:http://www.jb51.cc/article/p-dflgvcei-zw.html
本文出自【DylanAndroid的博客】

【玩转sqlite系列】文章目录
【玩转SQLite系列】(一)初识SQLite,重拾sql语句 【玩转SQLite系列】(二)SQLite创建和打开数据库的三种方式 【玩转SQLite系列】(三)通过sql语句 *** 作SQLite数据库 【玩转SQLite系列】(四)通过Android提供的API *** 作SQLite数据库 【玩转SQLite系列】(五)SQLite数据库优化 【玩转sqlite系列】(六)sqlite数据库应用案例实现历史搜索记录 【玩转sqlite系列】(七)sqlite数据库轻量级ORM *** 作数据库工具类
【玩转sqlite系列】(五)sqlite数据库优化

在平时的开发中,其实我们每次给数据库中插入一条数据,数据库都会单独开启一个事务,我们插入多少条数据,
就会对磁盘由多少次 *** 作。这样在数据比较多的情况下,大大的降低了数据库的 *** 作效率。那么,针对这个问题,我们如何来进行优化呢?

1.先创建一个数据库和创建一张表
/** * 1.创建或打开数据库连接 **/    private voID openDataBase() {        file dataBasefile = new file(Environment.getExternalStorageDirectory() + "/sqlite",Contacts.DATABASE_name3);        if (!dataBasefile.getParentfile().exists()) {            dataBasefile.mkdirs();        }        sqliteDatabase = sqliteDatabase.openorCreateDatabase(dataBasefile,null);    }    /**** * 2.创建表 */    private voID createtable() {        String sql = "CREATE table " +                "IF NOT EXISTS " +                "user(" +                "ID Integer PRIMARY KEY autoINCREMENT," +                "name varchar," +                "age Integer)";        sqliteDatabase.execsql(sql);    }
2.一般的插入数据,批量插入100条数据

我们用一般的数据库插入 *** 作去批量插入数据,然后记录一下所耗费的时间。

/** * 一般的插入数据,批量插入100条数据 * * @param v */    public voID general(VIEw v) {        long startTime = System.currentTimeMillis();        String table = "user";        for (int i = 0; i < 100; i++) {            ContentValues contentValues = new ContentValues();            contentValues.put("name","张三" + i);            contentValues.put("age",i);            sqliteDatabase.insert(table,null,contentValues);        }        long endTime = System.currentTimeMillis();        String message = "总共耗时" + (endTime - startTime);        Toast.makeText(this,message,Toast.LENGTH_SHORT).show();        Log.d(Contacts.TAG,message);    }
3.优化后,批量插入100条数据

如何进行优化?

sqliteDatabase.beginTransaction();开启一个事务

sqliteDatabase.setTransactionSuccessful();将数据库事务设置为成功

sqliteDatabase.endTransaction();结束数据库事务

上述三个方法在实际开发中经常联合使用,我们开启一个数据库事务,并在批量 *** 作数据库后将数据库事务设置为成功,
最后调用结束事务的方法,在结束数据库事务的时候,会先判断数据库事务的标志是否是成功,默认失败。如果成功,一次批量插入;
如果没有设置成功,则数据库事务进行回滚,对数据库不产生影响。

优化后的代码

/** * 优化后,批量插入100条数据 * * @param v */    public voID optimize(VIEw v) {        long startTime = System.currentTimeMillis();        String table = "user";        /**开启一个事务**/        sqliteDatabase.beginTransaction();        try {            for (int i = 0; i < 100; i++) {                ContentValues contentValues = new ContentValues();                contentValues.put("name","张三" + i);                contentValues.put("age",i);                sqliteDatabase.insertOrThrow(table,contentValues);            }            /**将数据库事务设置为成功**/            sqliteDatabase.setTransactionSuccessful();        } catch (Exception e) {            e.printstacktrace();        } finally {            /**结束数据库事务**/            sqliteDatabase.endTransaction();        }        long endTime = System.currentTimeMillis();        String message = "总共耗时" + (endTime - startTime);        Toast.makeText(this,message);    }
查看耗时

通过日志我们可以看到,一般方法插入耗时1457ms;而优化后耗时68ms。快了将近21倍。

总结

以上是内存溢出为你收集整理的【玩转SQLite系列】(五)SQLite数据库优化全部内容,希望文章能够帮你解决【玩转SQLite系列】(五)SQLite数据库优化所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/1165010.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-01
下一篇2022-06-01

发表评论

登录后才能评论

评论列表(0条)

    保存