将 SQL 查询结果导出为 csv 或 Excel
我想将SQL查询的结果写入csv或Excel文件,并将其保存在特定文件夹中。我有以下要求:
- 我想知道,这是否可以使用Java程序来实现,该程序可以重用于任何SQL查询结果。
- 我还想知道,这是否可以用于不同的数据库(Oracle,MySQL,SQL Server等)。
- 我计划将保存的文件附加到电子邮件中。是否可以将 SQL 查询结果直接导出到电子邮件?
我想将SQL查询的结果写入csv或Excel文件,并将其保存在特定文件夹中。我有以下要求:
通过使用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();
最简单的解决方案。
主要方法
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();
}