将 SQL 查询结果导出为 csv 或 Excel

2022-09-02 20:50:51

我想将SQL查询的结果写入csv或Excel文件,并将其保存在特定文件夹中。我有以下要求:

  1. 我想知道,这是否可以使用Java程序来实现,该程序可以重用于任何SQL查询结果。
  2. 我还想知道,这是否可以用于不同的数据库(Oracle,MySQL,SQL Server等)。
  3. 我计划将保存的文件附加到电子邮件中。是否可以将 SQL 查询结果直接导出到电子邮件?

答案 1

通过使用openCSV API,您可以将数据导出为csv文件。

CSVWriter writer = new CSVWriter(new FileWriter("yourfile.csv"), '\t');
Boolean includeHeaders = true;

java.sql.ResultSet myResultSet = .... //your resultset logic here

writer.writeAll(myResultSet, includeHeaders);

writer.close();

答案 2

最简单的解决方案。

主要方法

 private List<String> resultSetArray=new ArrayList<>();
 private String username ="";     // Enter DB Username
 private String password = "";    // Enter DB password
 private String url = "";         // Enter DB URL

 Connection connection=DriverManager.getConnection(url,user,pwd);   

 public static void main(String args[]) throws Exception{

        fetchDataFromDatabase("SQL queries", connection);
        printToCsv(resultArray);                

 }

从数据库获取数据

下面的代码对表中的列数进行计数,并存储在结果数组中。

private void fetchDataFromDatabase(String selectQuery,Connection connection) throws  Exception{
            try {


                Statement stmt = connection.createStatement();
                ResultSet rs = stmt.executeQuery(selectQuery);
                int numCols = rs.getMetaData().getColumnCount();

                while(rs.next()) {
                    StringBuilder sb = new StringBuilder();

                    for (int i = 1; i <= numCols; i++) {
                        sb.append(String.format(String.valueOf(rs.getString(i))) + " ");

                    }
                    resultSetArray.add(sb.toString());

                }

            } catch (SQLException e) {
                LOGGER.error("Sql exception " + e.getMessage());
            }

        }

printToCsv

 public static void printToCsv(List<String> resultArray) throws Exception{

        File csvOutputFile = new File(file_name);
        FileWriter fileWriter = new FileWriter(csvOutputFile, false);


        for(String mapping : resultArray) {
            fileWriter.write(mapping + "\n");
         }

        fileWriter.close();

    }