Android 数据库 大量插入 事务开启

摘要:
=db){db.close();}}returnfalse;}对于{RemoteDBUtil.insert;}时间消耗:106524ms,即106s2。启用事务批插入。使用insert方法publicstaticooleaninsert{boolean result=true;if{return true;}SQLiteDatabasedb在SqliteDateBase中为null;对于{ContentValuesvalues=remoteAppInfo.getContentValues();如果{result=false;break;}如果{db.setTransactionSuccessful();}}捕获{e.printStackTrace();returnfalse;}最后{try{if(null!=db){db.endTransaction();db.close();}}捕获{e.printStackTrace();}}returntrue;}耗时:2968ms3。启用事务批处理插入并使用SQLiteStatementpublicstaticbooleaninsertBySql{if{returnfalse;}SQLiteDatabasedb=null;try{db=openHelper.getWritableDatabase();Stringsql=“insertinto”+RemoteDBHelper.TABLE_APP_REMOTE+“”+“值(?

对照在android中批量插入数据的3中方式对照(各插入1W条数据所花费的时间):

1、 一个一个插入

 publicstaticboolean insert(SQLiteOpenHelper openHelper,  
            RemoteAppInfo appInfo) {  
        if (null == appInfo) {  
            returntrue;  
        }  
        SQLiteDatabase db = null;  
        try {  
            db = openHelper.getWritableDatabase();  
            ContentValues values = appInfo.getContentValues();  
            return -1 != db.insert(RemoteDBHelper.TABLE_APP_REMOTE, null,  
                    values);  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            if (null != db) {  
                db.close();  
            }  
        }  
        returnfalse;  
    }  


    for (RemoteAppInfo remoteAppInfo : list) {  
          RemoteDBUtil.insert(helper, remoteAppInfo); 
        }

耗时:106524ms,也就是106s

2、 开启事务批量插入。使用SqliteDateBase中的insert(String table, String nullColumnHack, ContentValues values)方法

publicstaticboolean insert(SQLiteOpenHelper openHelper,  
        List<RemoteAppInfo> list) {  
    boolean result = true;  
    if (null == list || list.size() <= 0) {  
        returntrue;  
    }  
    SQLiteDatabase db = null;  

    try {  
        db = openHelper.getWritableDatabase();  
        db.beginTransaction();  
        for (RemoteAppInfo remoteAppInfo : list) {  
            ContentValues values = remoteAppInfo.getContentValues();  
            if (db.insert(RemoteDBHelper.TABLE_APP_REMOTE, null, values) < 0) {  
                result = false;  
                break;  
            }  
        }  
        if (result) {  
            db.setTransactionSuccessful();  
        }  
    } catch (Exception e) {  
        e.printStackTrace();  
        returnfalse;  
    } finally {  
        try {  
            if (null != db) {  
                db.endTransaction();  
                db.close();  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
    returntrue;  
}  

耗时:2968ms

3、 开启事务批量插入,使用SQLiteStatement

  publicstaticboolean insertBySql(SQLiteOpenHelper openHelper,  
            List<RemoteAppInfo> list) {  
        if (null == openHelper || null == list || list.size() <= 0) {  
            returnfalse;  
        }  
        SQLiteDatabase db = null;  
        try {  
            db = openHelper.getWritableDatabase();  
            String sql = "insert into " + RemoteDBHelper.TABLE_APP_REMOTE + "("  
                    + RemoteDBHelper.COL_PKG_NAME + ","// 包名  
                    + RemoteDBHelper.COL_USER_ACCOUNT + ","// 账号  
                    + RemoteDBHelper.COL_APP_SOURCE + ","// 来源  
                    + RemoteDBHelper.COL_SOURCE_UNIQUE + ","// PC mac 地址  
                    + RemoteDBHelper.COL_MOBILE_UNIQUE + ","// 手机唯一标识  
                    + RemoteDBHelper.COL_IMEI + ","// 手机IMEI  
                    + RemoteDBHelper.COL_INSTALL_STATUS + ","// 安装状态  
                    + RemoteDBHelper.COL_TRANSFER_RESULT + ","// 传输状态  
                    + RemoteDBHelper.COL_REMOTE_RECORD_ID // 唯一标识  
                    + ") " + "values(?,?,?,?,?

,?

,?,?,?)"

; SQLiteStatement stat = db.compileStatement(sql); db.beginTransaction(); for (RemoteAppInfo remoteAppInfo : list) { stat.bindString(1, remoteAppInfo.getPkgName()); stat.bindString(2, remoteAppInfo.getAccount()); stat.bindLong(3, remoteAppInfo.getFrom()); stat.bindString(4, remoteAppInfo.getFromDeviceMd5()); stat.bindString(5, remoteAppInfo.getMoblieMd5()); stat.bindString(6, remoteAppInfo.getImei()); stat.bindLong(7, remoteAppInfo.getInstallStatus()); stat.bindLong(8, remoteAppInfo.getTransferResult()); stat.bindString(9, remoteAppInfo.getRecordId()); long result = stat.executeInsert(); if (result < 0) { returnfalse; } } db.setTransactionSuccessful(); } catch (Exception e) { e.printStackTrace(); returnfalse; } finally { try { if (null != db) { db.endTransaction(); db.close(); } } catch (Exception e) { e.printStackTrace(); } } returntrue; }

耗时:1365ms

免责声明:文章转载自《Android 数据库 大量插入 事务开启》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Win10系统的SurfacePro4如何重装系统-3 重装完成之后的系统优化【转】js实现另存为的方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

ipadmini从9.3.5降级8.4.1并完美越狱

ipadmini之前是iOS9.3.5实在是卡的用不了,于是打算降级,但是尝试了包括改版本描述等很多方法一直失败。今天突然成功降级8.4.1并且完美越狱,运行流畅了非常多。方法如下:打开网址:https://www.i4.cn/news_detail_18447.html,下载对应设备的8.4.1自制固件,一般的固件是不可以的。...

如何查看Oracle,MySQL,SQLServer三大数据库的事务隔离级别

1:mysql的事务隔离级别查看方法mysql最简单,执行这条语句就行:select@@tx_isolation详情:1.查看当前会话隔离级别select@@tx_isolation;2.查看系统当前隔离级别select@@global.tx_isolation;3.设置当前会话隔离级别setsessiontransactionisolatinlevelre...

国产操作系统——银河麒麟V10 SP1使用小结

几天前,我看了国内操作系统Galaxy Kirin有了新更新的新闻,于是我开始了一个新系统=============================================个人评价:这个系统是一个国产操作系统。尽管使用了大量的Ubuntu和Windows设计,使用了Linux内核,但这是国产操作系统从无到有的开始,其意义和价值远远大于其使用价值。总之...

C# Winform Treeview控件

WinformTreeview控件目录手动添加节点。丰富节点数据并清除所有节点信息。选择指定的节点。函数GetAllTreeNodeWinformTreeview控件手动添加节点//在根节点下添加根节点和子节点TreeNodeCollectionRoot=treeView1.Nodes;TreeNodecurNode=根。添加(“良好”);curN(电流)...

Animation

Animation(function($){functionactive(target,index){varactions=$(target).data('actions');if(index˂actions.length){varcallee=arguments.callee;varaction=actions[index];if(!$(target).d...

博科 SAN交换机配置文件备份和恢复(华为SNS系列交换机为例OEM博科)

如果需要将博科交换机的配置保存到本地电脑,可以通过configupload命令将博科交换机的配置以文本格式存到本地。如果交换机出了问题可以通过这个配置文件用configdownload命令进行恢复。如果是windows系统推荐用FileZillaServer软件搭建ftp服务器进行相应的配置。...