[英]Write a sql ResultSet to a csv file
我有一個連接到數據庫的函數,執行 sql 查詢並嘗試將結果寫入文件。
public class DBReader {
public ResultSet executeSQL(SqlContainer sc) {
String url = "url";
String user = "user";
String password = "pw";
Connection con;
Statement stmt;
ResultSet rs;
try {
System.out.println("=== Started SQL ===");
Class.forName("com.ibm.db2.jcc.DB2Driver");
con = DriverManager.getConnection(url, user, password);
con.setAutoCommit(false);
stmt = con.createStatement();
rs = stmt.executeQuery(sc.getSQL());
CSVWriter writer = new CSVWriter(new FileWriter("result.csv"));
writer.writeAll(rs, true);
stmt.close();
con.commit();
con.close();
System.out.println(" Finished SQL");
return rs;
} catch (SQLException | ClassNotFoundException | IOException e) {
e.printStackTrace();
}
return null;
}
}
然而,當我執行上面的函數時,出來的文件是空的。 我使用以下代碼來測試結果集是否為空,但如果我執行:
while (rs.next()) {
String value = rs.getString(4);
System.out.println("Something = " + value);
}
它返回一些值。
我會在正確的方向上提供任何幫助或點頭,提前致謝。
你也應該關閉writer
:
writer.close();
或者更好的是,您可以使用 try-with-resource 語句自動關閉它:
try(CSVWriter writer = new CSVWriter(new FileWriter("result.csv"));) {
System.out.println("=== Started SQL ===");
Class.forName("com.ibm.db2.jcc.DB2Driver");
con = DriverManager.getConnection(url, user, password);
con.setAutoCommit(false);
stmt = con.createStatement();
rs = stmt.executeQuery(sc.getSQL());
writer.writeAll(rs, true);
stmt.close();
con.commit();
con.close();
System.out.println(" Finished SQL");
return rs;
} catch (SQLException | ClassNotFoundException | IOException e) {
e.printStackTrace();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.