List数据批量插入数据库

为了提高大数据量的插入数据,对将要存入的list集合进行切割   此处的dulTpList 为百万级别的数据对象集合

            // 数据传输,为提高插入效率,对数据进行切割
            int size = 1000;    
            if (dulTpList.size() <= size) {
                // 若数据量小于size时,直接插入
                insertDulDataForSqlServer(con, dulTpList);
            } else {
                int times = (int) Math.ceil(dulTpList.size() / size);
                System.out.println("总插入批次   times: " + times);
                for (int i = 0; i <= times; i++) {
                    System.out.println("截取的开始角标"+i * size +"  截止角标" + Math.min((i + 1) * size, dulTpList.size()) + " min"+(i + 1) * size+" max"+dulTpList.size());
                    // Math.min()方法,取较小值
                    subList = dulTpList.subList(i * size, Math.min((i + 1) * size, dulTpList.size()));
                    // 插入
                    insertDulDataForSqlServer(con, subList);
                }
            }

切割源数据就保证了每次插入的数据为0-1000,1000-2000,2000-3000.....分阶段但有连续性的数据

此处的插入方法为原始的JDBC连接sqlserver 进行的插入操作,连接过程不再赘述,插入代码也一并贴出

    /**
     * 执行SqlServer数据库的插入操作
     * 
     * @param con        数据库连接对象
     * @param dulAllList 需要进行插入的数据
     * @param database
     * @throws SQLException
     */
    public void insertDulDataForSqlServer(Connection con, List<TemplatePojo> dulAllList) throws SQLException {
        // 执行插入语句
        PreparedStatement cmd = con
                .prepareStatement("insert into [EMR4].[dbo].[ET_DOCUMENT_STRUCTURED] values(?,?,?,?,?,?,?,?,?,?)");
        // 执行
        for (TemplatePojo templatePojo : dulAllList) {
            cmd.setString(1, templatePojo.getObjectId());
            cmd.setString(2, templatePojo.getObjectName());
            cmd.setString(3, templatePojo.getObjectType());
            cmd.setString(4, templatePojo.getOwnersection());
            cmd.setString(5, templatePojo.getObjectData());
            cmd.setString(6, templatePojo.getObjectDataText());
            cmd.setString(7, templatePojo.getObjectDataJson());
            cmd.setString(8, templatePojo.getItemText());
            cmd.setString(9, templatePojo.getDeptDocId());
            cmd.setString(10, templatePojo.getEtType());
            cmd.addBatch();
        }
        cmd.executeBatch();
        System.out.println("执行插入语句:");
        // 提交需要执行的语句
        con.commit();
        cmd.close();
    }

 

posted @ 2020-03-20 16:17  青春的西瓜  阅读(5109)  评论(2编辑  收藏  举报