1. 程式人生 > >Java將數據庫數據導入EXCEL

Java將數據庫數據導入EXCEL

exce lob helloword 返回 eat 類型 reat 加油 stat

一般的數據庫數據怎麽導入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 中
		}


4,開始建立sheet表單。同一時候採用元素據生成表頭

<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