我想做以下事情:
我遇到的问题是,为了处理ResultSet并将其转换为CSV字符串,我需要调用rs.next()
,但是这样做,我正在拉下一批'批次&#39 ;来自数据库。这是我到目前为止的代码:
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();
}
我如何让这个工作,以便每个&#34;批次&#34;处理2行并转换为CSV字符串?我想这样做是因为我将在一个非常大的桌子上运行它,这个桌子不适合内存(我只是测试它的批量大小为2)。
答案 0 :(得分:0)
您可以使用ResultSet.setFetchSize(int)设置提取大小,但通常您不应该关心内存中的整个表,并让驱动程序完成工作。