zoukankan      html  css  js  c++  java
  • sqlite 插入批量数据优化

    插入sqlite插入数据的方法

      1,execSQL() 直接拼接sql语句

      2,insert()

      3,compileStatement()预处理

    这三中方式插入数据相对较快依次是 compileStatement ,insert,execSQL

    插入大量数据是加上事务处理

     1 package com.example.natedb;
     2 
     3 import android.content.Context;
     4 import android.database.sqlite.SQLiteDatabase;
     5 import android.database.sqlite.SQLiteDatabase.CursorFactory;
     6 import android.database.sqlite.SQLiteOpenHelper;
     7 
     8 public class SqlDb extends SQLiteOpenHelper {
     9 
    10     public SqlDb(Context context){
    11         this(context,"lihao.db",null,1);
    12     }
    13     public SqlDb(Context context, String name, CursorFactory factory,
    14             int version) {
    15         super(context, name, factory, version);
    16         
    17     }
    18 
    19     @Override
    20     public void onCreate(SQLiteDatabase db) {
    21         // TODO Auto-generated method stub
    22         db.execSQL("create table person(_id integer primary key autoincrement,name text,age text)");
    23     }
    24 
    25     @Override
    26     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    27         // TODO Auto-generated method stub
    28 
    29     }
    30 
    31     
    32 }

    使用execSQL()插入一千条数据所使用的时间

        SqlDb db = new SqlDb(MainActivity.this);
        SQLiteDatabase database = db.getWritableDatabase();
      for (int i = 0; i < 1000; i++) {
            database.execSQL("insert into person(name,age) values('lihao','12')");
      }

    插入所耗的时间为 : 59504

    使用insert()

    1 SqlDb db = new SqlDb(MainActivity.this);
    2 SQLiteDatabase database = db.getWritableDatabase();
    3 for (int i = 0; i < 1000; i++) {
    4     ContentValues values = new ContentValues();
    5     values.put("name", "lihao");
    6     values.put("age", "12");
    7     database.insert("person", null, values );                    
    8 }

    插入所耗的时间为 : 57444

    使用compileStatement预处理

    1 SqlDb db = new SqlDb(MainActivity.this);
    2 SQLiteDatabase database = db.getWritableDatabase();
    3 SQLiteStatement statement = database.compileStatement("insert into person(name,age) values(?,?)");
    4 for (int i = 0; i < 1000; i++) {
    5     statement.bindString(1, "lihao");
    6     statement.bindString(2, "34");
    7     statement.executeInsert();
    8 }

    插入所耗的时间为 : 50069

    使用事物处理

     1 SqlDb db = new SqlDb(MainActivity.this);
     2 SQLiteDatabase database = db.getWritableDatabase(); 
      SQLiteStatement statement = database.compileStatement("insert into person(name,age) values(?,?)"); 3 database.beginTransaction(); 4 for (int i = 0; i < 1000; i++) { 5 statement.bindString(1, "lihao"); 6 statement.bindString(2, "34"); 7 statement.executeInsert(); 8 } 9 database.setTransactionSuccessful(); 10 database.endTransaction();

    加上事物以后所需时间为 1300  惊呆了!果然好不是一个量级

    以后处理大量插入数据时可以考虑使用事物

  • 相关阅读:
    [055] SSL 3.0曝出Poodle漏洞的解决方式-----开发人员篇
    java中接口的定义与实现
    很好的理解遗传算法的样例
    Memory Architecture-SGA-Database Buffer Cache
    ActionScript3游戏中的图像编程(连载十七)
    MacOS的g++使用clang,默认不支持C++11多线程: no matching constructor for initialization of 'std::thread'
    bash代码
    delete
    nautilus-open-terminal右键随处打开终端
    删除系统多余内核
  • 原文地址:https://www.cnblogs.com/lihaolihao/p/4399329.html
Copyright © 2011-2022 走看看