如何使用多线程来获取mysql中的数据

时间:2016-11-25 12:48:31

标签: java mysql multithreading

您好我正在尝试从MYSQL DB中的一个表中获取50K +行。检索所有数据并将其写入文本文件需要20多分钟。我可以使用多线程来减少这个获取时间并使代码更有效。任何帮助将不胜感激。

我使用了普通的JDBC连接和ResultSetMetaData来从表中获取行。

String row = "";
    stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("select * from employee_details");
    ResultSetMetaData rsmd = rs.getMetaData();
    int columnCount = rsmd.getColumnCount();
while (rs.next()) {
        for (int i = 1; i < columnCount; i++) {
            row = row + rs.getObject(i) + "|";// check
        }
        row = row + "\r\n";
    }

我正在文本文件中写入获取的值,如下所示。

BufferedWriter writer = new BufferedWriter(new FileWriter(
    "C:/Users/430398/Desktop/file/abcd.txt"));
    writer.write(row);
    writer.close();

2 个答案:

答案 0 :(得分:1)

请记住,rs.next将以n个批次从数据库中获取结果。其中n是JDBC-Implementation定义的数字。我现在假设现在是10岁。因此,对于每10个批次,它将再次查询数据库,因此将存在网络开销 - 即使它在同一台机器上。

只需增加该数字即可加快加载时间。

编辑: 加上这个 stmt.setFetchSize(50000); 可能是它。

请注意,这会导致大量内存消耗。

答案 1 :(得分:0)

首先,您需要确定瓶颈所在。是SQL查询吗?或者通过ResultSet获取行?还是建造巨大的绳子?或者也许写文件?

您需要测量上述算法各个部分的持续时间并告诉我们结果。没有这方面的知识就无法告诉如何加速算法。

相关问题