java實現資料庫資料匯出到excel
excel表格的匯入匯出有兩種方法,一種是jxl和poi 我是用的是jxl,所以要先下個Jar包,可以去搜索下載一個。
package com.wenliang.admin.web;
import java.io.File;
import jxl.*;
import jxl.write.*;
import jxl.write.biff.RowsExceededException;
import java.sql.*;
import java.util.*;
public class DBtoExcel {
/**
* 匯出Excel表
* @param rs 資料庫結果集
* @param filePath 要儲存的路徑,檔名為 fileName.xls
* @param sheetName 工作簿名稱 工作簿名稱,本方法目前只支援匯出一個Excel工作簿
* @param columnName 列名,型別為Vector
*/
public void WriteExcel(ResultSet rs, String filePath, String sheetName, Vector columnName) {
WritableWorkbook workbook = null;
WritableSheet sheet = null;
int rowNum = 1; // 從第一行開始寫入
try {
workbook = Workbook.createWorkbook(new File(filePath)); // 建立Excel檔案
sheet = workbook.createSheet(sheetName, 0); // 建立名為 sheetName 的工作簿
this.writeCol(sheet, columnName, 0); // 首先將列名寫入
// 將結果集寫入
while(rs.next()) {
Vector col = new Vector(); // 用以儲存一行資料
for(int i = 1; i <= columnName.size(); i++) { // 將一行內容儲存在col中
col.add(rs.getString(i));
}
// 寫入Excel
this.writeCol(sheet, col, rowNum++);
}
}catch(Exception e) {
e.printStackTrace();
}
finally {
try {
// 關閉
workbook.write();
workbook.close();
rs.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}
/***
* 將陣列寫入工作簿
* @param sheet 要寫入的工作簿
* @param col 要寫入的資料陣列
* @param rowNum 要寫入哪一行
* @throws WriteException
* @throws RowsExceededException
*/
private void writeCol(WritableSheet sheet, Vector col, int rowNum) throws RowsExceededException, WriteException {
int size = col.size(); // 獲取集合大小
for(int i = 0; i < size; i++) { // 寫入每一列
Label label = new Label(i, rowNum,(String) col.get(i));
sheet.addCell(label);
}
}
}
——————————————我是分割線————————————————————
/**
* @param args
* @throws Exception
*/
@RequestMapping(value="/",method=RequestMethod.GET)
public static void main(String []args) throws Exception {
String DRIVER = "com.mysql.jdbc.Driver";
String URL = "jdbc:mysql://192.168.1.4:3306/usersystem?useUnicode=true&characterEncoding=UTF-8";
String USERNAME = "root";
String USERPASSWORD = "root";
String sql = "select o.oid,su.username,su.name,su.phone,su.grade,ct.ctname,c.cname,s.sname,cg.cgname from t_openuser o LEFT JOIN t_student_user su ON o.student_userId=su.uid LEFT JOIN t_classtypes ct ON o.classtypeId=ct.ctid LEFT JOIN t_courses c ON o.coursesId=c.cid LEFT JOIN t_category cg ON o.categoryId=cg.cgid LEFT JOIN t_openuser_stages os ON os.openuserId=o.oid LEFT JOIN t_stages s ON os.stagesId=s.sid WHERE o.is_deleted=0 and su.is_deleted=0 and ct.is_deleted=0 and c.is_deleted=0 and s.is_deleted=0 and cg.is_deleted=0"; // 查詢語句
Vector columnName = new Vector(); // 列名
columnName.add("姓名"); //excel中的每個段的名字
columnName.add("賬戶");
columnName.add("電話");
columnName.add("班別");
columnName.add("階段");
columnName.add("課程");
columnName.add("科別");
columnName.add("年級");
// 連線資料庫
Class.forName(DRIVER);
Connection conn = DriverManager.getConnection(URL,USERNAME,USERPASSWORD);
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
// 匯出檔案
new DBtoExcel().WriteExcel(rs, "person.xls", "人物資訊", columnName);
}
因為還不太熟悉,所以記下此筆記,有不足的地方多多包涵,匯出的excel表格會預設儲存在eclipse的安裝路徑下,如需修改
請檢視程式碼中的註釋。
程式碼可直接貼上使用,但使用前請記得把下面的一段的sql修改一下