標籤:
插入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 插入批量資料最佳化