java实现将数据库数据查询出来并导出成excel

大致思路:首先利用jxl-2.6.12.jar中的方法创建一个excel文件,并将sheet页和在第一行中将每一个列写好,然后连接数据库将查询结果放入List中(java集合类是一种特别有用的工具类,我们做项目或者做一些小程序也有可能用到它;可用于存储数量不等的对象,并且可以实现常用的数据结构,比如栈、队列等。Java集合大致可以分List、Set、Queue和Map四种体系,主要详细讲讲List集合。那么List集合的主要特点:List代表有序、重复的集合,即元素按进入先后有序保存,可重复),并将数据结果注入到表对应的对象中,在从对象中获取属性值赋值写到sheet中。

image.png

主要实现:
package com.excel;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
public class TranferExcel {
public static void main(String[] args) throws RowsExceededException, WriteException, IOException {

    //1. 导出Excel的路径
    String filePath = "E:/export.xls";
    WritableWorkbook wwb =null;

    try {
        wwb = Workbook.createWorkbook(new File(filePath));
    } catch (Exception e) {
        e.printStackTrace();
    }

    //创建Excel表的"学生"区域的数据
    WritableSheet sheet = wwb.createSheet("学生信息",0);//或者rwb.getSheet(0)获取第一个区域
    //设置titles
    String[] titles={"编号","姓名","地址"};
    //单元格
    Label label=null;
    //第一行设置列名
    for(int i=0;i<titles.length;i++){

        label=new Label(i,0,titles[i]);
          //7:添加单元格
        sheet.addCell(label);
        System.out.println("00000000000099");
                 }

    try {
        //2. 连接数据库的几行代码
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String url = "jdbc:oracle:thin:@192.168.86.131:1521:upzxdb";
        String sql = "select * from student";
        con = DriverManager.getConnection(url, "upzxtest", "upzxtest");
        ps = con.prepareStatement(sql);// SQL预处理
        rs = ps.executeQuery();
        //ResultSet是数据库中的数据,将其转换为List类型
        List<Student> list = new ArrayList<>();
        while(rs.next()){
            Student stu = new Student();
            stu.setId(rs.getInt("id"));
            stu.setName(rs.getString("name"));
            stu.setAddr(rs.getString("addr"));//不要写成rs.getAddr ,getAddr只是student对象才有的方法

            list.add(stu);
        }
        ps.close();
        con.close();
        for(int i = 0; i<list.size(); i++){
            //Number对应数据库的int类型数据
            sheet.addCell(new Number(0,i+1,list.get(i).getId()));//0 列,i+1行
            //Label对应数据库String类型数据
            sheet.addCell(new Label(1,i+1,list.get(i).getName()));//1列,i+1行
            //Label对应数据库String类型数据
            sheet.addCell(new Label(2,i+1,list.get(i).getAddr()));//2列,i+1行
        }
        wwb.write();

    } catch (SQLException e) {
        e.printStackTrace();
    }finally{
        wwb.close();
    }


}

}

实体类:


image.png

涉及jar包与表:


image.png
image.png

缺点:jxl也有不足的地方,最主要体现在,它支持生成的报表最大行数为65535,如果超过这个数量,将会产生异常,而且也不支持Excel 2007+版本

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。