【问题标题】:Write a sql ResultSet to a csv file将 sql ResultSet 写入 csv 文件
【发布时间】:2020-06-30 13:51:22
【问题描述】:

我有一个函数可以连接到数据库,执行 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);
            }

它返回一些值。

我会在正确的方向上提供任何帮助或点头,在此先感谢。

【问题讨论】:

  • CSVWriterclose 方法吗?

标签: java sql csv jdbc


【解决方案1】:

你也应该关闭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();
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-12
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多