Sqlite   发布时间:2022-05-22  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了sqlite插入速度优化方案大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

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


  1. //MysqliteOpenHelper作为一个访问sqlite的帮助类,提供两方面的功能
  2. //1.getReadableDatabase(),getWritableDatabase()可以获sqliteDatatbase对象,
  3. //对这个对象进行相关操作
  4. //2.提供了onCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时进行操作
  5. publicclass@H_773_11@mysqliteOpenHelperextendssqliteOpenHelper{
  6. publicstaticfinalStringDATABASE_name="test.db";
  7. publicstaticfinalStringTAG="MysqliteOpenHelper";
  8. public@H_773_11@mysqliteOpenHelper(Contextcontext){
  9. this(context,DATABASE_name,null,1);
  10. }
  11. public@H_773_11@mysqliteOpenHelper(Contextcontext,intversion){
  12. this(context,version);
  13. }
  14. //必须要有这一个构造方法
  15. public@H_773_11@mysqliteOpenHelper(Contextcontext,Stringname,
  16. cursorFactoryfactory,intversion){
  17. super(context,factory,version);
  18. //Todoauto-generatedconstructorstub
  19. }
  20. //当数据库第一次创建的时候被调用,
  21. //当调用getReadableDatabase()或getWritableDatabase的时候
  22. @OverrIDe
  23. publicvoIDonCreate(sqliteDatabasedb){
  24. //Todoauto-generatedmethodstub
  25. Log.d(tag,"onCreate");
  26. Stringsql="createtableuser(IDIntegerprimaryKeyautoincrement,"
  27. +"namevarchar(20),"+"ageInteger,"+"heightlong,"
  28. +"REMARKvarchar(12))";
  29. db.execsql(sql);
  30. }
  31. publicvoIDclose(){
  32. sqliteDatabasedb=this.getWritableDatabase();
  33. db.execsql("droptableuser");
  34. }
  35. @OverrIDe
  36. publicvoIDonUpgrade(sqliteDatabasedb,intoldVersion,intnewVersion){
  37. //Todoauto-generatedmethodstub
  38. Log.d(tag,"onUpgrade");
  39. }
  40. }


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


  1. /**
  2. *ContentValues方式
  3. *
  4. *@paramsum
  5. *@return
  6. */
  7. publiclonginsert1(intsum){
  8. longbefore=System.nanoTime();
  9. @H_271_8@mysqliteOpenHelperdbHelper=new@H_773_11@mysqliteOpenHelper(MainActivity.this);
  10. //得到数据库对象
  11. sqliteDatabasedb=dbHelper.getWritableDatabase();
  12. for(inti=0;i<sum;i++){
  13. ContentValuescv=newContentValues();
  14. cv.put("name","zhangsan");
  15. cv.put("age","23");
  16. cv.put("height",1.78);
  17. cv.put("REMARK","无");
  18. db.insert("user",cv);
  19. }
  20. db.close();
  21. longafter=System.nanoTime();
  22. returnafter-before;
  23. }

2。使用基本slq语句插入。完成时间:3734808485(纳秒)

  1. publiclonginsert2(intsum){
  2. longbefore=System.nanoTime();
  3. @H_271_8@mysqliteOpenHelperdbHelper=new@H_773_11@mysqliteOpenHelper(MainActivity.this);
  4. //得到数据库对象
  5. sqliteDatabasedb=dbHelper.getWritableDatabase();
  6. for(inti=0;i<sum;i++){
  7. Stringsql="inserTintouser(name,REMARK)values('zhangsan',23,1.78,'无')";
  8. db.execsql(sql);
  9. }
  10. db.close();
  11. longafter=System.nanoTime();
  12. returnafter-before;
  13. }

3。使用sqlliteStatement插入。完成时间:4754616203(纳秒)

  1. publiclonginsert3(intsum){
  2. longbefore=System.nanoTime();
  3. @H_271_8@mysqliteOpenHelperdbHelper=new@H_773_11@mysqliteOpenHelper(MainActivity.this);
  4. //得到数据库对象
  5. sqliteDatabasedb=dbHelper.getWritableDatabase();
  6. Stringsql="inserTintouser(name,REMARK)values(?,?,?)";
  7. sqliteStatementstmt=db.compileStatement(sql);
  8. for(inti=0;i<sum;i++){
  9. stmt.clearBindings();
  10. stmt.bindString(1,"zhangsan");
  11. stmt.bindLong(2,23);
  12. stmt.bindLong(3,178);
  13. stmt.bindString(4,"无");
  14. stmt.execute();
  15. }
  16. db.close();
  17. longafter=System.nanoTime();
  18. returnafter-before;
  19. }

4。使用一次插入多条的方式。完成时间:245414315(纳秒)

  1. publiclonginsert4(intsum){
  2. longbefore=System.nanoTime();
  3. @H_271_8@mysqliteOpenHelperdbHelper=new@H_773_11@mysqliteOpenHelper(MainActivity.this);
  4. //得到数据库对象
  5. sqliteDatabasedb=dbHelper.getWritableDatabase();
  6. for(inti=0;i<sum/10;i++){
  7. Stringsql="inserTintouser(name,'无'),"
  8. +"('zhangsan','无')";
  9. db.execsql(sql);
  10. }
  11. db.close();
  12. longafter=System.nanoTime();
  13. returnafter-before;
  14. }

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


  1. publiclonginsert5(intsum){
  2. longbefore=System.nanoTime();
  3. @H_271_8@mysqliteOpenHelperdbHelper=new@H_773_11@mysqliteOpenHelper(MainActivity.this);
  4. //得到数据库对象
  5. sqliteDatabasedb=dbHelper.getWritableDatabase();
  6. db.begintransaction();
  7. for(inti=0;i<sum;i++){
  8. Stringsql="inserTintouser(name,'无')";
  9. db.execsql(sql);
  10. }
  11. db.settransactionsuccessful();
  12. db.endtransaction();
  13. db.close();
  14. longafter=System.nanoTime();
  15. returnafter-before;
  16. }

大佬总结

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:ageheightname