专注Java教育14年 全国咨询/投诉热线:444-1124-454
赢咖4LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java数据库导出csv文件的代码

Java数据库导出csv文件的代码

更新时间:2022-11-28 11:38:59 来源:赢咖4 浏览5170次

将数据从数据库导出到CSV文件任何软件应用程序的是一项常见的任务。在这篇文章中,将指导你如何编写Java代码从数据库读取数据并写入一个CSV文件。

这项技术是简单的。我们使用JDBC来从数据库读取数据并使用文件I / O写CSV文件。和底层数据库的JDBC驱动程序库是必要的(在这篇文章中使用MySQL)。

假设我们有一个表结构如下:

这个表包含一些数据是这样的:

首先,您将学习如何编写Java代码来从这个表的数据导出到一个CSV文件。然后我将与你分享如何编写,可重用的代码,适用于任何表。

1. 简单的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字段的值是不出口。一些列的值放在双引号是仍然有效,如果文本包含逗号。

2. 先进的Java代码从数据库导出到CSV文件示例

让我们看一下如何编写一个更通用的程序,可以使用任何表。以下是完整的程序代码:

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视频教程,里面的课程内容从入门到精通,细致全面,通俗易懂,很适合没有基础的小伙伴学习,希望对大家能够有所帮助。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>