mysql指定数据导出到指定execl表 (案例解读)——java+idea

发布于:2022-10-27 ⋅ 阅读:(493) ⋅ 点赞:(0)

在日常工作中,经常会使用到将数据库中的数据导出execl表,


提示:以下是本篇文章正文内容,下面案例可供参考

一、例子说明

需求:需要将数据库表中需要得数据放入指定execl得行列中,具体可看下图

             myaql数据库表:

           

           指定的execl:

           最终结果:

二、问题分析

1.操作步骤

        通过java语言逻辑去操作mysql数据库是需要通过JDBC(一种用于执行SQL语句的Java API)去完成,可以连接到数据库中,连接到数据库之后,将要执行sql查询语句作为一个参数,还需要创建一个实体类,在创建一个传入sql查询语句作为参数获取数据的类,返回一个集合,可供解析execl放入数据时候使用。

    添加相关依赖以及jar

      *JDBC需要用到的jar文件.将jar文件放入项目的lib目录中  mysql-connector-java-8.0.28-bin.jar,如果本地没有去官网下载即可。注意:一定要下载和你本地的mysql版本一致的jar包。下载以后进行解压,复制jar文件到lib目录下。mysql官网

        *给当前项目添加依赖(告诉当前项目/模块可以依赖jar文件中的代码) 右键ideaFile,选中Project Structure

 


点击OK
*添加解析Execl需要用到的opi依赖。

<dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>3.14</version>
</dependency>
    
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.14</version>
      
</dependency>

2.代码演示

创建实体类:

package com.zfy.sqltoexecl;
import java.sql.Date;
/**
 * @Auther: zfy
 * @Date: 2022/10/24 - 10 - 24 - 20:18
 * @Description: com.zfy.sqltoexecl
 * @version: 1.0
 */
//这是一个实体类
public class ComUser {
    //属性
    private int com_id; //id
    private String com_name;//填报公司
    private Date com_date;//填报日期
    private String com_linkman;//联系人
    private long com_linkcall;//联系电话
    //空参构造器
    public ComUser() {
    }
    //有参构造器
    public ComUser(int com_id, String com_name, Date com_date, String com_linkman, long com_linkcall) {
        this.com_id = com_id;
        this.com_name = com_name;
        this.com_date = com_date;
        this.com_linkman = com_linkman;
        this.com_linkcall = com_linkcall;
    }
    //geter/seter方法
    public int getCom_id() {
        return com_id;
    }

    public void setCom_id(int com_id) {
        this.com_id = com_id;
    }

    public String getCom_name() {
        return com_name;
    }

    public void setCom_name(String com_name) {
        this.com_name = com_name;
    }

    public Date getCom_date() {
        return com_date;
    }

    public void setCom_date(Date com_date) {
        this.com_date = com_date;
    }

    public String getCom_linkman() {
        return com_linkman;
    }

    public void setCom_linkman(String com_linkman) {
        this.com_linkman = com_linkman;
    }

    public long getCom_linkcall() {
        return com_linkcall;
    }

    public void setCom_linkcall(long com_linkcall) {
        this.com_linkcall = com_linkcall;
    }

    @Override
    public String toString() {
        return "ComUser{" +
                "com_id=" + com_id +
                ", com_name='" + com_name + '\'' +
                ", com_date=" + com_date +
                ", com_linkman='" + com_linkman + '\'' +
                ", com_linkcall=" + com_linkcall +
                '}';
    }
}

 连接数据库查询数据的类 

package com.zfy.sqltoexecl;
import java.sql.*;
/**
 * @Auther: zfy
 * @Date: 2022/10/24 - 10 - 24 - 19:54
 * @Description: com.zfy.sqltoexecl
 * @version: 1.0
 */
//这是一个连接数据库的工具类
public class ConnectSql {
    //这是一个连接数据库的方法 JDBC
    Connection connection = null;
    public void connect() {
        String url = "jdbc:mysql://127.0.0.1:3305/work?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
        String user = "****";//这里是mysql数据库账号
        String password = "****"; //这里是mysql数据库的密码
        //加载驱动
        String driver = "com.mysql.cj.jdbc.Driver";
        //加载驱动连接
        try {
            Class.forName(driver);
            //获得数据库连接
            connection = DriverManager.getConnection(url, user, password);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("数据库加载失败");
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            System.out.println("数据库连接失败");
        }
    }
    // 这是一个查询的方法 返回一个结果集  传入sql语句 这里返回一个ResultSet类型对象,可供获取数据
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;
    public ResultSet select(String sql) {
        connect();//方法之间的使用 在这里调用连接数据库的方法
        try {
            preparedStatement = connection.prepareStatement(sql);
            resultSet = preparedStatement.executeQuery();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return resultSet;
    }
  
}

获取数据的类,将数据存放集合可供解析execl时候放入单元格使用

package com.zfy.sqltoexecl;

import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * @Auther: zfy
 * @Date: 2022/10/25 - 10 - 25 - 9:53
 * @Description: com.zfy.sqltoexecl
 * @version: 1.0
 */
public class Getdata {
    //查询数据库中com表中的所有数据 返回List集合
    public List<ComUser> getComData(){
        //将语句对象存入一个List集合返回
        List<ComUser> listcom = new ArrayList<>();
        //连接数据库
        ConnectSql connectsql = new ConnectSql();
        connectsql.connect();
        //声明sql语句
        String sql = "select * from com";
        ResultSet select = connectsql.select(sql,null);
        try {
           while (select.next()){
               int com_id = select.getInt("com_id");
               String com_name = select.getString("com_name");
               Date com_date = select.getDate("com_date");
               String com_linkman = select.getString("com_linkman");
               long com_linkcall = select.getLong("com_linkcall");
            //将获取到的数据运用实体类,存放list集合当中 
               listcom.add(new ComUser(com_id,com_name,com_date,com_linkman,com_linkcall));
           }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return listcom;
    }
}

 解析execl类 将获取到的数据放入指定execl的单元格中

package com.zfy.sqltoexecl;

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.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @Auther: zfy
 * @Date: 2022/10/25 - 10 - 25 - 15:35
 * @Description: com.zfy.sqltoexecl
 * @version: 1.0
 */
public class ToExecl {
    //将获取到的数据放进execl
    public static void main(String[] args) {
        toExecl();
    }
    public static void toExecl(){
        FileInputStream fileInputStream = null;
        FileOutputStream fileOutputStream = null;
        try {
            //先读取execl
            String execlpath ="E:\\bug buxiban\\baomi\\SqlToExecl.xlsx";
            File file = new File(execlpath);
            fileInputStream = new FileInputStream(file);
            HSSFWorkbook sheets = new HSSFWorkbook(fileInputStream);
            //获取第一张表单 getSheetAt(这里是execl表单的下标)
            HSSFSheet sheet0 = sheets.getSheetAt(0);
            List<ComUser> listcom = new Getdata().getComData();
            for (int i = 0; i < listcom.size(); i++) {
                //获取execl每一行 刚好行的个数等于集合中获取数据的长度
                HSSFRow row = sheet0.getRow(i);
                //每一行获取列对象,就可以根据循环设置单元格内容 
                //这里的单元格内容就是获取数据放在集合中的实体类对象,这个对象就可以调用实体类中的get方法 从而被成功设置。
                row.getCell(2).setCellValue(listcom.get(i).getCom_name());
                row.getCell(12).setCellValue(listcom.get(i).getCom_date());
                row.getCell(17).setCellValue(listcom.get(i).getCom_linkman());
                row.getCell(22).setCellValue(listcom.get(i).getCom_linkcall());
            }
            //写出一个新的execl
            fileOutputStream  = new FileOutputStream(new File("E:\\bug buxiban\\baomi\\SqlToExecl1.xlsx"));
            sheets.write(fileOutputStream);
            fileOutputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //关闭流 从下到上关闭
           if (fileOutputStream!=null){
               try {
                   fileOutputStream.close();
               } catch (IOException e) {
                   e.printStackTrace();
               }
           }
           if (fileInputStream!=null){
               try {
                   fileInputStream.close();
               } catch (IOException e) {
                   e.printStackTrace();
               }
           }
        }
    }
}

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到