Java將數據庫數據導入EXCEL
阿新 • • 發佈:2017-08-12
exce lob helloword 返回 eat 類型 reat 加油 stat
6,存到文件
能直接執行的代碼
一般的數據庫數據怎麽導入excel中呢??這讓人非常疑惑,今天我找到了一個方法能夠實現
須要導入一個第三方包下載地址
詳細內容例如以下:
裏面含有指導文檔,index.html裏面含有怎樣讀取數據庫文件到excel和excel數據到數據庫中。
主要用到一個包
將這個包復制到項目裏面就能夠了。
先做一個簡單版本號的helloword
<span style="white-space:pre"> </span>public void mkexcel() throws Exception{ //首先在內存中建立好工作薄 HSSFWorkbook book =new HSSFWorkbook();//建立好工作薄 HSSFSheet sheet = book.createSheet("表一");//表單名以及表單 HSSFRow row=sheet.createRow(4);//創建行數 HSSFCell cell=row.createCell(4);//創建列數 cell.setCellValue("大哥哥。加油!!效果圖:");//將數據寫到cell中去 //內存中建立可不行。必需要寫到文件 FileOutputStream out =new FileOutputStream("a.xls"); book.write(out); }
通過上面的簡單實例,我們能發現,創建xls的文件類似於在網頁中動態創建table表格類似點擊打開鏈接
1。建立工作薄
2,薄建立表
3。表建行
4。行建列
5,列裏面設值
有了上面的這個簡單的介紹,如今開始導入數據庫裏面的內容
1,我們必須從內存中建立工作薄
<span style="font-size:18px; white-space: pre;"> </span><span style="font-size:24px;">HSSFWorkbook book =new HSSFWorkbook();</span>
2,創建sheet的時候。我們須要指定sheet名,全部須要用到元數據得到database裏面的table名
Connection con =hibernateFactory2.getCon();//數據庫連接成功
DatabaseMetaData dmeta=con.getMetaData();//元數據<span style="font-size:24px;">ResultSet rs=dmeta.getCatalogs();//獲得全部的數據庫,可是為了方便。我們直接指定數據庫名</span>
3。獲得table名。
<span style="white-space:pre"> </span>String dName="hncu"; //獲得數據庫裏面的表名,返回ResultSet 所有放在list中 ResultSet rs= dmeta.getTables(dName, dName, null, new String[]{"TABLE"}); //放在list 中,為後面的sheet名 List<String > list =new ArrayList<String>(); while(rs.next()) { <span style="white-space: pre;"> </span>list.add(rs.getString("TABLE_NAME"));//找出表名將其放入list 中 }
<span style="white-space:pre"> <span style="font-size:24px;"> </span></span><span style="font-size:24px;">for(String sheetname:list){ HSSFSheet sheet=book.createSheet(sheetname);//設置表單和表單名 String sql="select * from "+dName+"."+sheetname;//以數據庫的名字.表名來獲取 Statement st =con.createStatement(); ResultSet rs2=st.executeQuery(sql); ResultSetMetaData rsmd=rs2.getMetaData(); int col =rsmd.getColumnCount();//獲得有多少列 //生成表單的第一行,表頭 HSSFRow row0 =sheet.createRow(0); for(int i=0;i<col;i++){ HSSFCell cell = row0.createCell(i); cell.setCellValue(rsmd.getColumnName(i+1)); }</span>
5,創建行和列以及設置行列的值
<span style="white-space:pre"> </span>int idx=1;//用來生成行 //第一頭部分完畢 //完畢第二部分 while(rs2.next()){ HSSFRow row =sheet.createRow(idx++);//一行創建完畢。開始創建列 for(int i =0 ;i<col;i++){ HSSFCell cell =row.createCell(i); cell.setCellValue(rs2.getString(i+1)); } } }
6,存到文件
<span style="white-space:pre"> </span><span style="font-size:24px;">FileOutputStream out =new FileOutputStream("db.xls"); <span style="white-space:pre"> </span> book.write(out);//採用book來進行寫</span>
能直接執行的代碼
public void Test3() throws Exception{ /* * 要先得到數據庫裏面的數據。我們必須採用元數據,獲得想關的內容 * 要是直接執行,須要導包 建立數據庫,查看的生成後文件在和根文件夾src同級 */ //先從內存中的數據建立 HSSFWorkbook book =new HSSFWorkbook(); Connection con =hibernateFactory2.getCon();//數據庫連接 DatabaseMetaData dmeta=con.getMetaData();//元素據 // ResultSet rs=dmeta.getCatalogs();//獲得所有的數據庫 String dName="hncu"; //獲得數據庫裏面的表名,返回ResultSet 所有放在list中 ResultSet rs= dmeta.getTables(dName, dName, null, new String[]{"TABLE"}); //放在list 中,為後面的sheet名 List<String > list =new ArrayList<String>(); while(rs.next()) { list.add(rs.getString("TABLE_NAME"));//找出表名將其放入list 中 } for(String sheetname:list){ HSSFSheet sheet=book.createSheet(sheetname);//設置表單和表單名 String sql="select * from "+dName+"."+sheetname;//以數據庫的名字.表名來獲取 Statement st =con.createStatement(); ResultSet rs2=st.executeQuery(sql); ResultSetMetaData rsmd=rs2.getMetaData(); int col =rsmd.getColumnCount();//獲得有多少列 //生成表單的第一行 HSSFRow row0 =sheet.createRow(0); for(int i=0;i<col;i++){ HSSFCell cell = row0.createCell(i); cell.setCellValue(rsmd.getColumnName(i+1)); } int idx=1; //第一頭部分完畢 //完畢第二部分 while(rs2.next()){ HSSFRow row =sheet.createRow(idx++);//一行創建完畢。開始創建列 for(int i =0 ;i<col;i++){ HSSFCell cell =row.createCell(i); cell.setCellValue(rs2.getString(i+1)); } } } FileOutputStream out =new FileOutputStream("db.xls"); book.write(out);
就這樣就將數據所有導入到excel裏面了
效果圖:
數據庫中的數據
導出的excel的數據
可以全然導出來,可是在實驗的時候。數據庫類型為blob類型的不能導出,由於excel 的每一個單元格的數據不支持那麽大的。
有什麽問題,大家一起提出來,共同討論下。謝謝
Java將數據庫數據導入EXCEL