更新时间:2022-11-28 11:38:59 来源:极悦 浏览5446次
将数据从数据库导出到CSV文件任何软件应用程序的是一项常见的任务。在这篇文章中,将指导你如何编写Java代码从数据库读取数据并写入一个CSV文件。
这项技术是简单的。我们使用JDBC来从数据库读取数据并使用文件I / O写CSV文件。和底层数据库的JDBC驱动程序库是必要的(在这篇文章中使用MySQL)。
假设我们有一个表结构如下:
这个表包含一些数据是这样的:
首先,您将学习如何编写Java代码来从这个表的数据导出到一个CSV文件。然后我将与你分享如何编写,可重用的代码,适用于任何表。
下面的代码是一个简单的Java程序,它连接到一个MySQL数据库读取从审查表的所有行,写数据到一个CSV文件:
package net.codejava;
import java.io.*;
import java.sql.*;
/**
* A simple Java program that exports data from database to CSV file.
* @author Nam Ha Minh
* (C) Copyright codejava.net
*/
public class SimpleDb2CsvExporter {
public static void main(String[] args) {
String jdbcURL = "jdbc:mysql://localhost:3306/sales";
String username = "root";
String password = "password";
String csvFilePath = "Reviews-export.csv";
try (Connection connection = DriverManager.getConnection(jdbcURL, username, password)) {
String sql = "SELECT * FROM review";
Statement statement = connection.createStatement();
ResultSet result = statement.executeQuery(sql);
BufferedWriter fileWriter = new BufferedWriter(new FileWriter(csvFilePath));
// write header line containing column names
fileWriter.write("course_name,student_name,timestamp,rating,comment");
while (result.next()) {
String courseName = result.getString("course_name");
String studentName = result.getString("student_name");
float rating = result.getFloat("rating");
Timestamp timestamp = result.getTimestamp("timestamp");
String comment = result.getString("comment");
if (comment == null) {
comment = ""; // write empty value for null
} else {
comment = "\"" + comment + "\""; // escape double quotes
}
String line = String.format("\"%s\",%s,%.1f,%s,%s",
courseName, studentName, rating, timestamp, comment);
fileWriter.newLine();
fileWriter.write(line);
}
statement.close();
fileWriter.close();
} catch (SQLException e) {
System.out.println("Datababse error:");
e.printStackTrace();
} catch (IOException e) {
System.out.println("File IO error:");
e.printStackTrace();
}
}
}
正如你所看到的在这个程序中,它是写为一个特定的表的列的名称是已知的。运行这个程序,你会看到Reviews-export。生成csv文件包含以下内容:
注意ID字段的值是不出口。一些列的值放在双引号是仍然有效,如果文本包含逗号。
让我们看一下如何编写一个更通用的程序,可以使用任何表。以下是完整的程序代码:
package net.codejava;
import java.io.*;
import java.sql.*;
import java.text.*;
import java.util.*;
/**
* An advanced Java program that exports data from any table to CSV file.
* @author Nam Ha Minh
* (C) Copyright codejava.net
*/
public class AdvancedDb2CsvExporter {
private BufferedWriter fileWriter;
public void export(String table) {
String jdbcURL = "jdbc:mysql://localhost:3306/sales";
String username = "root";
String password = "password";
String csvFileName = getFileName(table.concat("_Export"));
try (Connection connection = DriverManager.getConnection(jdbcURL, username, password)) {
String sql = "SELECT * FROM ".concat(table);
Statement statement = connection.createStatement();
ResultSet result = statement.executeQuery(sql);
fileWriter = new BufferedWriter(new FileWriter(csvFileName));
int columnCount = writeHeaderLine(result);
while (result.next()) {
String line = "";
for (int i = 2; i <= columnCount; i++) {
Object valueObject = result.getObject(i);
String valueString = "";
if (valueObject != null) valueString = valueObject.toString();
if (valueObject instanceof String) {
valueString = "\"" + escapeDoubleQuotes(valueString) + "\"";
}
line = line.concat(valueString);
if (i != columnCount) {
line = line.concat(",");
}
}
fileWriter.newLine();
fileWriter.write(line);
}
statement.close();
fileWriter.close();
} catch (SQLException e) {
System.out.println("Datababse error:");
e.printStackTrace();
} catch (IOException e) {
System.out.println("File IO error:");
e.printStackTrace();
}
}
private String getFileName(String baseName) {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
String dateTimeInfo = dateFormat.format(new Date());
return baseName.concat(String.format("_%s.csv", dateTimeInfo));
}
private int writeHeaderLine(ResultSet result) throws SQLException, IOException {
// write header line containing column names
ResultSetMetaData metaData = result.getMetaData();
int numberOfColumns = metaData.getColumnCount();
String headerLine = "";
// exclude the first column which is the ID field
for (int i = 2; i <= numberOfColumns; i++) {
String columnName = metaData.getColumnName(i);
headerLine = headerLine.concat(columnName).concat(",");
}
fileWriter.write(headerLine.substring(0, headerLine.length() - 1));
return numberOfColumns;
}
private String escapeDoubleQuotes(String value) {
return value.replaceAll("\"", "\"\"");
}
public static void main(String[] args) {
AdvancedDb2CsvExporter exporter = new AdvancedDb2CsvExporter();
exporter.export("review");
exporter.export("product");
}
}
你通过表名出口()方法,它所有的工作。CSV文件的名字是生成基于表名,其次是_Export和当前日期时间:
String csvFileName = getFileName(table.concat("_Export"));
getFileName()方法编写如下:
private String getFileName(String baseName) {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
String dateTimeInfo = dateFormat.format(new Date());
return baseName.concat(String.format("_%s.csv", dateTimeInfo));
}
如果评审表名,那么CSV文件的名称将review_export_2019 - 10 - 14 - _20 52 - 55. CSV。时间戳添加到CSV文件名称将用于最终用户将能够区分每个数据导出。
writeHeaderLine()方法编写列名在CSV文件的第一行。它使用ResultSetMetaData列的名称——这意味着它可以处理任何表。
注意,程序不出口ID列的值(它应该是总是第一列)。
然后您可以使用该程序从任何您希望的表导出数据,如下:
AdvancedDb2CsvExporter exporter = new AdvancedDb2CsvExporter();
exporter.export("review");
exporter.export("product");
以上就是关于“Java数据库导出csv文件的代码”介绍,大家如果想了解更多相关知识,不妨来关注一下本站的Java视频教程,里面的课程内容从入门到精通,细致全面,通俗易懂,很适合没有基础的小伙伴学习,希望对大家能够有所帮助。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习