欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

将数据库中的数据表导出Excel

程序员文章站 2024-03-21 08:27:58
...

将数据库中的数据表导出Excel

代码:

package com.XXX.controller;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.*;

/**
 * @author XXXX
 * @date XXXX/XX/XX
 */
public class MySQLDownLoadExcel {
    /**
     * 将数据库中的数据表写入Excel表格
     */
    public static void main(String[] args) {
        String dname = "command_document";//数据库名称
        String tname = "command_list";//要导出的表名
        String path = "C:/Users/dell/Desktop/"+tname+".xls";//导出位置
        HSSFWorkbook book = new HSSFWorkbook();//创建一个Excel文件
        HSSFSheet sheet = book.createSheet("表");
        try {
            //连接数据库
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection connection;
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/"+dname+"?useUnicode=true&characterEncoding=utf-8","root","root");
            Statement statement = connection.createStatement();
            //写查询的sql语句,查出想要导出的表内容
            String sql = "select * from "+tname;
            //执行sql
            ResultSet rs = statement.executeQuery(sql);
            ResultSetMetaData rsmd = rs.getMetaData(); //得到结果集的字段名
            int a = rsmd.getColumnCount();//得到数据表的结果集的字段的数量
            //生成表单的第一行,即表头
            HSSFRow row0 = sheet.createRow(0);//创建第一行
            for (int i = 0; i < a; i++) {
                HSSFCell cell = row0.createCell(i);//创建第一行的第i列
                cell.setCellValue(rsmd.getColumnName(i+1));
            }
            //将数据表中的数据按行导入进Excel表中
            int r = 1;
            while(rs.next()){
                HSSFRow row = sheet.createRow(r++);//创建非第一行的其他行
                for (int i = 0; i < c; i++) {//仍然是c列,导入第r行的第i列
                    HSSFCell cel = row.createCell(i);
                    cel.setCellValue(rs.getString(i+1));
                }
            }
            //用文件输出流创建表格
            try {
                FileOutputStream outputStream = new FileOutputStream(path);
                try {
                    book.write(outputStream);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    book.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}