Oracle批量插入6种方法小结

准备

`
create table T_DQS_DATA_CRITERION_PAGE
(
ID VARCHAR2(32) not null
constraint T_DQS_DATA_CRITERION_PAGE_PK
primary key,
DATA_CRITERION_PRIMARY_ID VARCHAR2(32) not null,
IS_ASSOCIATE NUMBER,
FILE_NAME VARCHAR2(512) not null,
FILE_SAVE_NAME VARCHAR2(512) not null,
FILE_TYPE VARCHAR2(32) not null,
FILE_IMG_TYPE NUMBER,
FILE_PATH VARCHAR2(1024) not null,
FILE_SERVER_IP VARCHAR2(128),
FILE_SERVER_PORT VARCHAR2(128),
CREATE_USER VARCHAR2(32),
MODIFY_USER VARCHAR2(32),
DELETE_STATUS NUMBER,
DATA_ACCESS_CODE VARCHAR2(32),
CREATE_TIME DATE,
MODIFY_TIME DATE
)
``
在这里插入图片描述
这是尝试玩玩的6种方式。

1基本for循环拆入,手写SQL跟mybatis框架的save是一样的

朴实无华的插入语句

在这里插入图片描述

在这里插入图片描述
手写sql跟mybatis框架的save方法是一个效果。

2xml里写for循环结果

在这里插入图片描述
在这里插入图片描述
这是网传最多的一种,其实有点垃圾。

3 xml里begin end for循环

在这里插入图片描述
在这里插入图片描述
这也网传较多的一种。不是很好。

4 mybatis框架的saveBatch方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这种跟网上手写的应该是一样的,哈哈。
至少可以完全不用写啥代码了。

5 sqlSessionFactory 方法

在这里插入图片描述
在这里插入图片描述
这是我试的最快的一种方法,可能数据量不大吧。

6 jdbc 底层连接的的批处理

 public void testJdbcBatch(List<DataCriterionPage> list) {
        long t1 = System.currentTimeMillis();
        String url = "jdbc:p6spy:oracle:thin:@172.18.21.50:1521/orcl2150";
        String user = "GZ_DATA_CONTROL";
        String password = "GZ_DATA_CONTROL#ZZYC202009";
        Connection conn = null;
        PreparedStatement pstm = null;
        ResultSet rt = null;
        try {
            Class.forName("com.p6spy.engine.spy.P6SpyDriver");
            conn = DriverManager.getConnection(url, user, password);
            String sql = "insert into T_DQS_DATA_CRITERION_PAGE(\n" +
                    "            ID,DATA_CRITERION_PRIMARY_ID,IS_ASSOCIATE,FILE_NAME,FILE_SAVE_NAME,FILE_TYPE,FILE_IMG_TYPE,\n" +
                    "            FILE_PATH,FILE_SERVER_IP,FILE_SERVER_PORT,CREATE_TIME,CREATE_USER,\n" +
                    "            MODIFY_TIME,MODIFY_USER,DELETE_STATUS,DATA_ACCESS_CODE\n" +
                    "        ) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
            pstm = conn.prepareStatement(sql);
            conn.setAutoCommit(false);

            for (DataCriterionPage dataCriterionPage : list) {
                pstm.setString(1, dataCriterionPage.getId());
                pstm.setString(2, dataCriterionPage.getDataCriterionPrimaryId());
                pstm.setInt(3, dataCriterionPage.getIsAssociate());
                pstm.setString(4, dataCriterionPage.getFileName());
                pstm.setString(5, dataCriterionPage.getFileSaveName());
                pstm.setString(6, dataCriterionPage.getFileType());
                pstm.setInt(7, dataCriterionPage.getFileImgType());
                pstm.setString(8, dataCriterionPage.getFilePath());
                pstm.setString(9, dataCriterionPage.getFileServerIp());
                pstm.setString(10, dataCriterionPage.getFileServerPort());
                pstm.setDate(11, new java.sql.Date(dataCriterionPage.getCreateTime().getTime()));
                pstm.setString(12, dataCriterionPage.getCreateUser());
                pstm.setDate(13, new java.sql.Date(dataCriterionPage.getCreateTime().getTime()));
                pstm.setString(14, dataCriterionPage.getModifyUser());
                pstm.setInt(15, 1);
                pstm.setString(16, "");
                pstm.addBatch();
            }
            pstm.executeBatch();
            conn.commit();
            long t2 = System.currentTimeMillis();
            long t3 = t2 - t1;
            log.info("[插入时间]->[end-start]->[{}]", (t3));
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        } finally {
            if (pstm != null) {
                try {
                    pstm.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
            }
        }
    }

在这里插入图片描述
这个我测试得也不是很快,不知道是不是没有写成静态加载类对象的问题,或者工具类获取连接,静态会与Springboot项目发生事务冲突。

新手出村,多多指教。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值