Java将数据库数据导入EXCEL

一般的数据库数据怎么导入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 的每个单元格的数据不支持那么大的。

有什么问题,大家一起提出来,共同讨论下。谢谢


发布了107 篇原创文章 · 获赞 30 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/yangxin_blog/article/details/50341277
今日推荐