码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-07-03 12:35:05      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:数据   android   数据库   插入   insert   

对比在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 数据库 大量插入 事务开启

标签:数据   android   数据库   插入   insert   

原文地址:http://blog.csdn.net/u012583459/article/details/46738625

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!