如何批处理数据库表的内容

  • 本文关键字:数据库 批处理 java jdbc
  • 更新时间 :
  • 英文 :


我想做以下事情:

  • 连接到Postgres数据库并选择一个特定表的内容,每次2行
  • 将这两行转换为CSV字符串,并将该字符串通过网络发送到RESTful API端点

我遇到的问题是,为了处理ResultSet并将其转换为CSV字符串,我需要调用rs.next(),但在这样做时,我正在从数据库中提取下一个"批处理"。下面是我到目前为止的代码:

public void load() throws Exception {
        Connection conn = connectToDB();
        conn.setAutoCommit(false);
        Statement st = conn.createStatement();
        st.setFetchSize(2);
        ResultSet rs = st.executeQuery("SELECT * FROM friends");
        String csv = resultSetToCSV(rs);
        System.out.println("CSV output is: " + csv);
        rs.close();
        st.close();
    }
    private static String resultSetToCSV(ResultSet rs) throws Exception {
        int colCount = rs.getMetaData().getColumnCount();
        StringBuilder result = new StringBuilder();
        while (rs.next()) {
            for (int i = 0; i < colCount; i++) {
                result.append(""").append(rs.getString(i + 1)).append('"');
            }
            result.append(System.lineSeparator());
        }
        return result.toString();
    }

我怎样才能做到这一点,使每个"批"的2行被处理并转化为CSV字符串?我想这样做,因为我要在一个非常大的表上运行它,这将不适合内存(我只是用批处理大小为2来测试它)。

您可以使用ResultSet.setFetchSize(int)设置读取大小,但通常您不应该关注整个表在内存中的拟合,而让驱动程序完成这项工作。

最新更新