数据库操作过程中经常会遇到需要大批量操作数据的情况,使用不同的方式会占用不同的时间,下面是我在 OrmLite 中的一些耗时记录

  1. 使用 callBatchTasks 加载数据
qfQbsCellDao.callBatchTasks(new Callable<Object>() {
            @Override
            public Object call() throws Exception {
                for (DataAdjustmentSyncCellQBSInfos cellItem : cellQBSInfos) {
                    TblQFQbsCell cellData = new TblQFQbsCell();
                    cellData.setCellId(cellItem.getId());
                    cellData.setCellCode(cellItem.getCode());
                    cellData.setCellName(cellItem.getName());
                    cellData.setCellTypeId(cellItem.getCellTypeId());
                    cellData.setPartId(cellItem.getPartQBSId());
                    cellData.setContractId(cellItem.getContractId());
                    cellData.setModifyTime(cellItem.getLastModTime());
                    cellData.setState(cellItem.getState());
                    cellData.setJsonData(gson.toJson(cellItem));
                    qfQbsCellDao
                            .createOrUpdate(cellData);
                }
                return null;
            }
        })

image-20220428162626384

共 7373ms

  1. 直接 createOrUpdate
for (DataAdjustmentSyncCellQBSInfos cellItem : cellQBSInfos) {
            TblQFQbsCell cellData = new TblQFQbsCell();
            cellData.setCellId(cellItem.getId());
            cellData.setCellCode(cellItem.getCode());
            cellData.setCellName(cellItem.getName());
            cellData.setCellTypeId(cellItem.getCellTypeId());
            cellData.setPartId(cellItem.getPartQBSId());
            cellData.setContractId(cellItem.getContractId());
            cellData.setModifyTime(cellItem.getLastModTime());
            cellData.setState(cellItem.getState());
            cellData.setJsonData(gson.toJson(cellItem));
            qfQbsCellDao
                    .createOrUpdate(cellData);
        }

image-20220428162925869

共 29319ms

  1. 使用 AndroidDatabaseConnection 一次提交事务
// ORMLite 的数据连接封装类
        AndroidDatabaseConnection adc = new AndroidDatabaseConnection(baseDBHelper.getWritableDatabase(),true);
        qfQbsCellDao.setAutoCommit(adc,false);
        // 存储点名称为 create_claxx
        Savepoint sp = adc.setSavePoint("Create_Update_Cell");
        for (DataAdjustmentSyncCellQBSInfos cellItem : cellQBSInfos) {
            TblQFQbsCell cellData = new TblQFQbsCell();
            cellData.setCellId(cellItem.getId());
            cellData.setCellCode(cellItem.getCode());
            cellData.setCellName(cellItem.getName());
            cellData.setCellTypeId(cellItem.getCellTypeId());
            cellData.setPartId(cellItem.getPartQBSId());
            cellData.setContractId(cellItem.getContractId());
            cellData.setModifyTime(cellItem.getLastModTime());
            cellData.setState(cellItem.getState());
            cellData.setJsonData(gson.toJson(cellItem));
            qfQbsCellDao
                    .createOrUpdate(cellData);
        }
        adc.commit(sp);

image-20220428163708217

共 7574ms