大致思路:首先利用jxl-2.6.12.jar中的方法创建一个excel文件,并将sheet页和在第一行中将每一个列写好,然后连接数据库将查询结果放入List中(java集合类是一种特别有用的工具类,我们做项目或者做一些小程序也有可能用到它;可用于存储数量不等的对象,并且可以实现常用的数据结构,比如栈、队列等。Java集合大致可以分List、Set、Queue和Map四种体系,主要详细讲讲List集合。那么List集合的主要特点:List代表有序、重复的集合,即元素按进入先后有序保存,可重复),并将数据结果注入到表对应的对象中,在从对象中获取属性值赋值写到sheet中。
主要实现:
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();
}
}
}
实体类:
涉及jar包与表:
缺点:jxl也有不足的地方,最主要体现在,它支持生成的报表最大行数为65535,如果超过这个数量,将会产生异常,而且也不支持Excel 2007+版本