簡體   English   中英

將 sql ResultSet 寫入 csv 文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM