java实现批量插入数据

在处理大量数据插入时,为了避免数据库限制和提高效率,可以采用分批插入策略。文章介绍了将数据放入列表,每达到一定数量(如100条)就调用批量接口插入的方法,同时提供了针对Oracle和其它数据库的不同SQL实现,以减少内存消耗并加快插入速度。
摘要由CSDN通过智能技术生成

日常工作或者学习中,可能会遇到批量插入数据的需求,一般情况下数据量少的时候,我们会直接调用批量接口插入数据即可,当数据量特别大时,可能由于数据库限制,插入的数据最多不能超过100条(假如限制100条),就算是数据库支持一次性插入千条也会耗内存,如果使用一条一条的插入数据库中的话,会特别耗时间,大概是正常批量插入数据所耗时间的三倍,所以我们就会用到分批插入数据。

  • 思路
  • 我们将数据查出,放到list里面,然后将数据循环,每次循环到100条,就调用批量插入接口。

代码实现:

@Override
    public void selectData(String statisDate, String eventCode) {
        List<FilterLogEntity> filterLogEntity = filterlogMapper.selectData(statisDate, eventCode);
        //存储插入数据(100条数据)
        List<DataLog> dataLogList = new ArrayList<>();
        int nums = 100;
        for (int i = 0; i < filterLogEntity.size(); i++) {
            dataLogList.add(filterLogEntity.get(i));
            if (i > 0 && i % nums == 0 || i == filterLogEntity.size() - 1) {
                filterOraMapper.insertData(dataLogList);
                //每次插入完数据,将上次存储的100条数据清空
                dataLogList.clear();
            }
        }
    }

xml中sql,此处是给oracle数据库中插入数据

<insert id="insertData">
		insert into 表名
		(
		a,
		b,
		c
		)
		<foreach collection="dataLogList" item="item" separator="UNION ALL">
			select
			#{item.a},
			#{item.b},
			#{item.c}
			from dual
		</foreach>
	</insert>

给其他数据库插入数据:

<insert id="insertList" parameterType="java.util.List">
		insert into 表名 (a,b,c)
		VALUES
		<foreach collection="dataLogList" index="index" item="item" separator="," >
			(
			#{item.a},
			#{item.b},
			#{item.c}
			)
		</foreach>
	</insert>
后续新增:
给oracle数据库插入数据,也可以用这种方法
```xml
begin
        <foreach collection="list" item="item" index="index">
            insert into masakr.TB_HUMAN_SOCIAL_SECURITY@LINK33
            (date_time, province, city, pr_name, pr_lingering_num, city_name, city_lingering_num,
            gender_name,gender_num)
            values(
            #{item.dateTime},
            #{item.province},
            #{item.city},
            #{item.prName},
            #{item.prLingeringNum},
            #{item.cityName},
            #{item.cityLingeringNum},
            #{item.genderName},
            #{item.genderNum}
            );
        </foreach>
        end;

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 在 Java 中,有多种方法实现数据批量插入,其中常用的方法如下: 1. JDBC Statement: 使用 JDBC Statement 可以通过设置 addBatch() 和 executeBatch() 方法实现批量插入。 2. JDBC PreparedStatement: 使用 JDBC PreparedStatement 可以通过设置 addBatch() 和 executeBatch() 方法实现批量插入,比 Statement 效率更高。 3. Hibernate: Hibernate 是一个开源的 Java 持久层框架,支持批量插入。 4. JPA: JPA 是 Java Persistence API 的缩写,是 Java 持久层的标准规范,支持批量插入。 以上四种方法都可以帮助你实现数据批量插入,你可以根据自己的需求选择合适的方法进行实现。 ### 回答2: 在Java中,要实现数据批量插入,可以使用JDBC(Java Database Connectivity)来操作数据库。 首先,需要建立数据库连接。可以使用JDBC提供的DriverManager类的getConnection方法来创建数据库连接。示例代码如下: ```java String url = "jdbc:mysql://localhost:3306/mydatabase"; String username = "root"; String password = "password"; Connection conn = DriverManager.getConnection(url, username, password); ``` 接下来,可以使用PreparedStatement类来创建可执行SQL语句的实例,并设置参数。在执行批量插入时,可以使用addBatch方法来向批处理中添加多个SQL语句。示例代码如下: ```java String insertQuery = "INSERT INTO mytable (column1, column2) VALUES (?, ?)"; PreparedStatement pstmt = conn.prepareStatement(insertQuery); pstmt.setString(1, "value1"); pstmt.setString(2, "value2"); pstmt.addBatch(); // 添加第一条记录 pstmt.setString(1, "value3"); pstmt.setString(2, "value4"); pstmt.addBatch(); // 添加第二条记录 // 添加其他记录... pstmt.executeBatch(); // 执行批量插入 ``` 最后,记得在操作完成后关闭数据库连接。 ```java pstmt.close(); conn.close(); ``` 通过以上步骤,可以使用Java实现数据批量插入。此方法可以提高数据库插入效率,减少与数据库的通信次数,从而极大地提升程序的性能。 ### 回答3: 在Java实现数据批量插入可以使用数据库的批处理操作来提高插入效率。以下是一种常见的实现方式: 1. 使用JDBC连接到数据库:首先需要使用Java的JDBC API连接到数据库。这可以通过配置数据库连接信息和加载合适的驱动程序来完成。 2. 创建插入语句:根据需要插入的数据,创建合适的插入语句。可以使用预编译的SQL语句,以便在插入多个数据时只需编译一次,并且可以重复使用。 3. 设定批处理大小:根据需要插入的数据数量,设定每次插入的批处理大小。较大的批处理大小可以提高插入效率,但同时也会消耗更多的内存。 4. 创建批处理操作:使用Java的JDBC API,创建批处理操作对象,关联到连接的数据库和插入语句。 5. 设置参数并添加到批处理操作:为每个需要插入的数据,设置合适的参数,并将操作添加到批处理中。 6. 执行批处理操作:在准备好所有需要插入的数据后,使用批处理操作的executeBatch()方法来执行批处理插入操作。 7. 处理插入结果:根据需要处理插入结果,例如检查插入是否成功等。 8. 关闭资源:在插入完成后,关闭所有的数据库资源,包括连接和批处理操作等。 使用批处理插入可以减少与数据库的通信次数,从而提高插入效率。但需要注意的是,批处理插入的数据量过大可能会导致内存溢出,因此需要根据实际情况设置合适的批处理大小。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值