java jdbc导出数据库大量数据

背景

java 导出数据库数据,在数据量比较大的情况下,如果全部将数据读到内存中再执行写文件,很容易遇到内存溢出;为了避免内存溢出的问题,使用游标的方式,边读边写;

分页的方式,当数据量较大的情况下,需要花费一些建立数据库连接的消耗,而且存在事务的问题,比如导出第二页数据的时候,在第一页插入了内容,那么第二页就会导出重复的数据,也不是很推荐,所以可以尝试使用游标的方式;

数据准备

BEGIN
	FOR i IN 1..2000000
	LOOP
-- 	插入数据SQL
	INSERT INTO ......
-- 	
IF
	i MOD 10000 = 0 THEN
	COMMIT;

END IF;

END LOOP;
END;

通过循环的方式插入200W数据,为了提高插入效率,1万条提交一次;

导出数据方法

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import java.io.*;
import java.sql.*;
import java.util.LinkedList;
import java.util.List;

@Slf4j
public class DataExportTest {
   


    public static final String URL = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
    public static final String DRIVER = "oracle.jdbc.OracleDriver";
    public static final String PASSWORD = "youdasi";
    public static final String USERNAME = "youdasi";

    @Test
    public void exportTest() throws Exception {
   

        //初始化数据库连接
        Connection connection = initConnection();
        Statement statement = connection.createStatement();

        //FETCH_SIZE 的大小视具体情况而定
        statement.setFetchSize(1000);

        ResultSet resultSet = statement.executeQuery("SELECT * FROM TEST");
        ResultSetMetaData metaData 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值