Java批量处理数据

要求:共1000条数据,第一次批量插入100条,第二次批量插入101到200条,依次插入数据;

实现方式这里选择了两种常用的方式,都是使用List操作;

第一种实现思路如下:

<1> 原先存放数据的List为recordList,求出共需批量处理的次数;

<2> 新建一个List为list,循环后,将recordList的前maxValue条数据放到list里;

<3> 调用批量处理方法,调用recordList的removeAll方法将list中的数据从recordList中清除;

<4> 调用list.clear方法清除掉list本身的数据;

/**
     * 批量插入   例如:共1000条数据,第一次批量插入100条,第二次批量插入101到200条,依次插入数据;
     *
     * @param recordList
     * @param maxValue  批量处理的条数,如1000条
     * @return
     */
    private void batchAddRecords(List<String> recordList, int maxValue) {
        List<String> list = new ArrayList<String>();
        int size = recordList.size();
        int total = size / maxValue;
        if (size % maxValue != 0) {
            total += 1;
        }

        for (int i = 0; i < total; i++) {
            if (i == total - 1) {
                maxValue = size - (i * maxValue);
            }
            for (int j = 0; j < maxValue; j++) {
                list.add(recordList.get(j));
            }
            // 批量处理的方法
            print(list);
            recordList.removeAll(list);
            list.clear();
        }
    }

第二种实现思路类似:

通过调用recordList的subList方法,将截取后的内容保存到list中,然后调用批量处理方法,最后调用list的clear方法将list和recordList中的这部分数据清除;

需注意的是:List的subList方法有点特殊,它操作的是list和原先list所引用的同一块内存,所以需要注意些。

private void batchAddRecords2(List<String> recordList, int maxValue) {
        List<String> list = new ArrayList<String>();
        int size = recordList.size();
        int total = size / maxValue;
        if (size % maxValue != 0) {
            total += 1;
        }
        for (int i = 0; i < total; i++) {
            if (i == total - 1) {
                maxValue = size - (i * maxValue);
            }
            list = recordList.subList(0, maxValue);
            // 批量处理的方法
            print(list);
            list.clear();
        }
    }
时间: 2024-08-28 21:04:46

Java批量处理数据的相关文章

java批量插入数据进数据库中

方式1: for循环,每一次进行一次插入数据. 方式2: jdbc的preparedStatement的batch操作 PreparedStatement.addBatch(); ...... PreparedStatement.executeBatch(); 一次最多不要超过50条:1.因为当你插入的时候 数据库已经锁定,然而如果你一次性插入太多会造成其他业务的等待.2.会造成内存的溢出 方式2的本质是:insert into table (a,b,c,d) values(av,bv,cv.d

Java 批量插入数据(Oracle)

//批量添加20000条数据用时8秒. try { String url = "jdbc:oracle:thin:@IP:1521:orcl"; // orcl为数据库的SID String user = "oracle"; String password = "oracle"; StringBuffer sql = new StringBuffer(); sql.append("insert into ex_log (EX_LOG_I

java 批量插入数据 到数据库

//大数据插入方式 String sql = "insert into T_DR_RF(CUSTOMER_CODE,RFID_TAG) values(?,?)"; Connection connection =db.getConnection(); connection.setAutoCommit(false); PreparedStatement ps = connection.prepareStatement(sql); for (Map<String, Object>

Java批量插入、更新数据

Java的批量添加数据,多个字段同时添加多条数据,我不知道你遇到过没有.今天我们就以一个具体的实例来说一下Java的批量添加数据,面向的是Oracle数据库. 前台页面: <span style="font-size:14px;"><body class="main_body" scroll="no"> <div class="employee_gun_dong"> <form nam

java 批量插入10万条数据

for (int i = 0; i < 100000; i++) { dbHelper.insert("INSERT aaa(name) Values ('1')"); } 运行时间==780450ms conn = getConn(); // JAVA默认为TRUE,我们自己处理需要设置为FALSE,并且修改为手动提交,才可以调用rollback()函数 conn.setAutoCommit(false); st = conn.createStatement(); long s

Java通过Mybatis实现批量插入数据到Oracle中

最近项目中遇到一个问题:导入数据到后台并将数据插入到数据库中,导入的数据量有上万条数据,考虑采用批量插入数据的方式: 结合网上资料,写了个小demo,文章末尾附上demo下载地址 1.新建项目:项目目录结构如下图所示,添加相应的jar包 2.新建数据库表:ACCOUNT_INFO 1 CREATE TABLE ACCOUNT_INFO ( 2 "ID" NUMBER(12) NOT NULL , 3 "USERNAME" VARCHAR2(64 BYTE) NULL

java把excel数据批量导入到数据库

java把excel数据批量导入到数据库中,java导入excel数据代码如下 1.    public List<Choice> GetFromXls(String xlsname){ 2. 3.        List<Choice> choices = new ArrayList<Choice>(); 4.        Choice choice=null; 5.        try { 6.            java.io.File file=new

Java模拟数据量过大时批量处理数据实现

代码: import java.util.ArrayList; import java.util.List; /** * 模拟批量处理数据 * 当数据量过大过多导致超时等问题可以将数据进行分批处理 * @author [] * */ public class BatchUtil { public static void listBatchUtil(List<Integer> lists) { System.out.println(lists); // 定义批处理的数据数量(即批处理条件) in

Mybatis批量更新数据

Mybatis批量更新数据 第一种方式 [html] view plain copy print? <update id="updateBatch" parameterType="Map"> update aa   set a=#{fptm}, b=#{csoftrain} where c in <foreach collection="cs" index="index" item="item&qu