gpt4 book ai didi

Java 如何在结果集中检索超过 100 万行

转载 作者:行者123 更新时间:2023-11-30 10:14:15 24 4
gpt4 key购买 nike

我正在对具有 16,213,156 行和 10 列的 MYSQL 表执行选择查询。但是在建立连接后,代码只执行了几分钟,然后抛出错误:

我的系统配置是 16 GB 内存,Java 8

我尝试将 Jvm 参数设置为 -Xms4G & -Xmx12G 。还尝试设置 stmt.setFetchSize();//到 10,100,1000 仍然是同样的错误

我们可以使用 JDBC API 获取如此大量的记录吗?我是否遗漏了什么?非常感谢任何帮助。

package com;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;

import com.opencsv.CSVWriter;

public class Test1 {
private static Connection conn = null;

public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException {

connection();
retrieve(conn);

}



public static void connection()
{

try
{
Class.forName("com.mysql.jdbc.Driver");
String url = "<jdbc connection url>";
conn = DriverManager.getConnection(url, "<username>", "<password>");
System.out.println("Connection established");
}

catch(Exception e)
{
e.printStackTrace();
}

}


public static void retrieve(Connection conn)
{
ResultSet rs = null;
Statement stmt = null;
try
{

stmt = conn.createStatement();
// stmt.setFetchSize(100); // 1000, 10
System.out.println(stmt.getFetchSize()); // By default prints 0
rs = stmt.executeQuery("SELECT * FROM tablename");
CSVWriter writer = new CSVWriter(new BufferedWriter(new FileWriter("C:\\finaldata\\test.csv")));
System.out.println("**** Started writing Data to CSV ****");
int lines = writer.writeAll(rs, true, false, false);
writer.flush();
writer.close();
System.out.println("** OpenCSV -Completed writing the resultSet at " + new Date() + " Number of lines written to the file " + lines);

}
catch(Exception e)
{
e.printStackTrace();
}
}
}

最佳答案

@MickMnemonic 感谢您的帮助,这解决了问题。

单独设置 fetchSize 可能不足以让 MySQL 驱动程序开始从数据库流式传输数据,而不是一次加载所有内容。你可以试试

stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, 
ResultSet.CONCUR_READ_ONLY); stmt.setFetchSize(Integer.MIN_VALUE);

关于Java 如何在结果集中检索超过 100 万行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50953347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com