加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-12 20:16:52 所属栏目:百科 来源:网络整理
导读:本帖最后由 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
本帖最后由 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 stubLog.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都有情怀的

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

代码片段,双击复制