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
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都有情怀的
原文链接:https://www.f2er.com/sqlite/201276.html

猜你在找的Sqlite相关文章