sqlite 插入批量資料最佳化

來源:互聯網
上載者:User

標籤:

插入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     @Override20     public void onCreate(SQLiteDatabase db) {21         // TODO Auto-generated method stub22         db.execSQL("create table person(_id integer primary key autoincrement,name text,age text)");23     }24 25     @Override26     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {27         // TODO Auto-generated method stub28 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  驚呆了!果然好不是一個量級

以後處理大量插入資料時可以考慮使用事物

 

sqlite 插入批量資料最佳化

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.