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


    对照在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

  • 相关阅读:
    Gym
    HDU-2680 Choose the best route 单向边+反向dijkstra
    Hdu1010Tempter of the Bone 深搜+剪枝
    CodeForces
    CodeForces
    Gym-101375C MaratonIME eats japanese food 初始化struct技巧
    Gym
    java was started but returned exit code =-805306369的处理方法
    启动myeclipse弹窗Please allow Subclipse team to receive anonymous usage statistics for this Eclipse intance
    eclipse包分层
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7253583.html
Copyright © 2020-2023  润新知