sqlite插入速度优化方案

sqlite插入速度优化方案,第1张

概述先贴上SQLiteOpenHelper的代码,我们创建测试的表是user,它有四个字段id,name,age,height,remark,测试用的小米2,默认条数为100行。 //MySQliteOpenHelper作为一个访问SQLite的帮助类,提供两方面的功能   //1.getReadableDatabase(),getWritableDatabase()可以获得SQLiteDatatba

先贴上sqliteOpenHelper的代码,我们创建测试的表是user,它有四个字段ID,name,age,height,remark,测试用的小米2,默认条数为100行。


//MysqLiteOpenHelper作为一个访问sqlite的帮助类,提供两方面的功能 //1.getReadableDatabase(),getWritableDatabase()可以获得sqliteDatatbase对象, //对这个对象进行相关 *** 作 //2.提供了onCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时进行 *** 作 publicclassMysqLiteOpenHelperextendssqliteOpenHelper{ publicstaticfinalStringDATABASE_name="test.db"; publicstaticfinalStringTAG="MysqLiteOpenHelper"; publicMysqLiteOpenHelper(Contextcontext){ this(context,DATABASE_name,null,1); } publicMysqLiteOpenHelper(Contextcontext,intversion){ this(context,version); } //必须要有这一个构造方法 publicMysqLiteOpenHelper(Contextcontext,Stringname, CursorFactoryfactory,intversion){ super(context,factory,version); //Todoauto-generatedconstructorstub } //当数据库第一次创建的时候被调用, //当调用getReadableDatabase()或getWritableDatabase的时候 @OverrIDe publicvoIDonCreate(sqliteDatabasedb){ //Todoauto-generatedmethodstub Log.d(TAG,"onCreate"); Stringsql="createtableuser(IDintegerprimarykeyautoincrement," +"namevarchar(20),"+"ageinteger,"+"heightlong," +"remarkvarchar(12))"; db.execsql(sql); } publicvoIDclose(){ sqliteDatabasedb=this.getWritableDatabase(); db.execsql("droptableuser"); } @OverrIDe publicvoIDonUpgrade(sqliteDatabasedb,intoldVersion,intnewVersion){ //Todoauto-generatedmethodstub Log.d(TAG,"onUpgrade"); } }


1。使用ContentValues插入。完成时间:4805493666(纳秒)


/** *ContentValues方式 * *@paramsum *@return */ publiclonginsert1(intsum){ longbefore=System.nanoTime(); MysqLiteOpenHelperdbHelper=newMysqLiteOpenHelper(MainActivity.this); //得到数据库对象 sqliteDatabasedb=dbHelper.getWritableDatabase(); for(inti=0;i<sum;i++){ ContentValuescv=newContentValues(); cv.put("name","zhangsan"); cv.put("age","23"); cv.put("height",1.78); cv.put("remark","无"); db.insert("user",cv); } db.close(); longafter=System.nanoTime(); returnafter-before; }
2。使用基本slq语句插入。完成时间:3734808485(纳秒)

publiclonginsert2(intsum){ longbefore=System.nanoTime(); MysqLiteOpenHelperdbHelper=newMysqLiteOpenHelper(MainActivity.this); //得到数据库对象 sqliteDatabasedb=dbHelper.getWritableDatabase(); for(inti=0;i<sum;i++){ Stringsql="insertintouser(name,remark)values('zhangsan',23,1.78,'无')"; db.execsql(sql); } db.close(); longafter=System.nanoTime(); returnafter-before; }
3。使用sqlliteStatement插入。完成时间:4754616203(纳秒)

publiclonginsert3(intsum){ longbefore=System.nanoTime(); MysqLiteOpenHelperdbHelper=newMysqLiteOpenHelper(MainActivity.this); //得到数据库对象 sqliteDatabasedb=dbHelper.getWritableDatabase(); Stringsql="insertintouser(name,remark)values(?,?,?)"; sqliteStatementstmt=db.compileStatement(sql); for(inti=0;i<sum;i++){ stmt.clearBindings(); stmt.bindString(1,"zhangsan"); stmt.bindLong(2,23); stmt.bindLong(3,178); stmt.bindString(4,"无"); stmt.execute(); } db.close(); longafter=System.nanoTime(); returnafter-before; }
4。使用一次插入多条的方式。完成时间:245414315(纳秒)

publiclonginsert4(intsum){ longbefore=System.nanoTime(); MysqLiteOpenHelperdbHelper=newMysqLiteOpenHelper(MainActivity.this); //得到数据库对象 sqliteDatabasedb=dbHelper.getWritableDatabase(); for(inti=0;i<sum/10;i++){ Stringsql="insertintouser(name,'无')," +"('zhangsan','无')"; db.execsql(sql); } db.close(); longafter=System.nanoTime(); returnafter-before; }

5.使用事务处理插入方式。完成时间:229787881(纳秒)


publiclonginsert5(intsum){ longbefore=System.nanoTime(); MysqLiteOpenHelperdbHelper=newMysqLiteOpenHelper(MainActivity.this); //得到数据库对象 sqliteDatabasedb=dbHelper.getWritableDatabase(); db.beginTransaction(); for(inti=0;i<sum;i++){ Stringsql="insertintouser(name,'无')"; db.execsql(sql); } db.setTransactionSuccessful(); db.endTransaction(); db.close(); longafter=System.nanoTime(); returnafter-before; } 总结

以上是内存溢出为你收集整理的sqlite插入速度优化方案全部内容,希望文章能够帮你解决sqlite插入速度优化方案所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1180988.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存