sqlite插入速度优化方案 申请加精

前端之家收集整理的这篇文章主要介绍了sqlite插入速度优化方案 申请加精前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
本帖最后由 yxmshaka 于 2013-4-10 17:52 编辑

我们创建测试的表是user,它有四个字段id,name,age,height,remark,测试用的小米2,默认条数为100行。
?
代码片段,双击复制
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@H_502_70@ 25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//MysqLiteOpenHelper作为一个访问sqlite的帮助类,提供两方面的功能
//1.getReadableDatabase(),getWritableDatabase()可以获得sqliteDatatbase对象,
//对这个对象进行相关操作
//2.提供了onCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时进行操作
public class MysqLiteOpenHelper extends sqliteOpenHelper {
static final String DATABASE_NAME = "meacs.db" ;
String TAG = "MysqLiteOpenHelper" ;
public MysqLiteOpenHelper(Context context) {
this (context,DATABASE_NAME, null , 1 );
}
MysqLiteOpenHelper(Context context,85)!important">int version) {
}
// 必须要有这一个构造方法
CursorFactory factory,monospace!important; min-height:auto!important"> version) {
super // TODO Auto-generated constructor stub
}
// 当数据库第一次创建的时候被调用,
// 当调用getReadableDatabase ()或getWritableDatabase 的时候
@Override
void onCreate(sqliteDatabase db) {
// TODO Auto-generated method stub
Log.d(TAG, "onCreate" );
String sql = "create table user(id integer primary key autoincrement,"
+ "name varchar(20)," + "age integer,255)!important">"height long,"
"remark varchar(12))" ;
db.execsql(sql);
}
close() {
sqliteDatabase db = .getWritableDatabase();
db.execsql( "drop table user" );
}
@Override
onUpgrade(sqliteDatabase db,monospace!important; min-height:auto!important"> oldVersion,monospace!important; min-height:auto!important"> newVersion) {
// TODO Auto-generated method stub
"onUpgrade" );
}
}

1。使用ContentValues插入。完成时间:4805493666(纳秒)
23
/**
* ContentValues方式
*
* @param sum
* @return
*/
long insert1( sum) {
long before = System.nanoTime();
MysqLiteOpenHelper dbHelper = new MysqLiteOpenHelper(MainActivity. );
// 得到数据库对象
sqliteDatabase db = dbHelper.getWritableDatabase();
for ( i = 0 ; i < sum; i++) {
ContentValues cv = ContentValues();
cv.put( "name" "zhangsan" );
"age" "23" );
"height" 1.78 );
"remark" "无" );
db.insert( "user" }
db.close();
after = System.nanoTime();
return after - before;
}

2。使用基本slq语句插入。完成时间:3734808485(纳秒)
13
insert2( sum) {
before = System.nanoTime();
);
// 得到数据库对象
sqliteDatabase db = dbHelper.getWritableDatabase();
; i < sum; i++) {
"insert into user(name,remark) values('zhangsan',23,1.78,'无')" ;
db.execsql(sql);
}
db.close();
after = System.nanoTime();
after - before;
}

3。使用sqlliteStatement插入。完成时间:4754616203(纳秒)
19
insert3( sqliteDatabase db = dbHelper.getWritableDatabase();
;
sqliteStatement stmt = db.compileStatement(sql);
; i < sum; i++) {
stmt.clearBindings();
stmt.bindString( );
stmt.bindLong( 2 23 );
3 178 );
4 );
stmt.execute();
}
db.close();
after = System.nanoTime();
after - before;
}

4。使用一次插入多条的方式。完成时间:245414315(纳秒)
22
insert4(
; i < sum / 10 ; i++) {
"('zhangsan',"
;
db.execsql(sql);
}
db.close();
after = System.nanoTime();
after - before;
}

5.使用事务处理插入方式。完成时间:229787881(纳秒)
16
insert5(
db.beginTransaction();
; i < sum; i++) {
;
db.execsql(sql);
}
db.setTransactionSuccessful();
db.endTransaction();
db.close();
after = System.nanoTime();
after - before;
}


最近在忙cocos2d-x开发的事情,睡得比较晚,临睡前 看到了一篇文章 感觉很好 ,跟大家分享了,这个绝对是精华所在。
刚才有人说转帖要说明出处又回去找了一遍找到了做人要厚道 哈
转自:http://blog.csdn.net/ihrthk/article/details/8741047

回帖推荐

laozhao查看楼层

实际测试当同时使用事务时,循环内部使用ContentValues更快 ContentValues: 342224121 270477293 488250732 623504637 164733888 149871825 158111570 ------ sql: 210998534 743438721 241638183 187103272 172088624

yxmshaka查看楼层

ContentValues快 这个是必然的 但老程序员对t-sql都有情怀的

猜你在找的Sqlite相关文章