Java将数据库数据导入EXCEL
2015-12-17 14:28
671 查看
一般的数据库数据怎么导入excel中呢??这让人很疑惑,今天我找到了一个方法可以实现
需要导入一个第三方包下载地址
具体内容如下:
![](https://img-blog.csdn.net/20151217143415751?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
里面含有指导文档,index.html里面含有如何读取数据库文件到excel和excel数据到数据库中。
![](https://img-blog.csdn.net/20151217144149578?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
主要用到一个包
![](https://img-blog.csdn.net/20151217143617945?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
将这个包拷贝到项目里面就可以了。
先做一个简单版本的helloword
![](https://img-blog.csdn.net/20151217144352246?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
通过上面的简单实例,我们能发现,创建xls的文件类似于在网页中动态创建table表格类似点击打开链接
1,建立工作薄
2,薄建立表
3,表建行
4,行建列
5,列里面设值
有了上面的这个简单的介绍,现在开始导入数据库里面的内容
1,我们必须从内存中建立工作薄
2,创建sheet的时候,我们需要指定sheet名,所有需要用到元数据得到database里面的table名
Connection con =hibernateFactory2.getCon();//数据库连接成功
DatabaseMetaData dmeta=con.getMetaData();//元数据
3,获得table名,
4,开始建立sheet表单,同时采用元素据生成表头
5,创建行和列以及设置行列的值
6,存到文件
能直接运行的代码
就这样就将数据全部导入到excel里面了
效果图:
数据库中的数据
![](https://img-blog.csdn.net/20151217151054431?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
导出的excel的数据
![](https://img-blog.csdn.net/20151217151128293?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
能够完全导出来,但是在实验的时候,数据库类型为blob类型的不能导出,因为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 的每个单元格的数据不支持那么大的。
有什么问题,大家一起提出来,共同讨论下。谢谢
相关文章推荐
- Maven Missing artifact jdk.tools:jdk.tools:jar:1.7 解决办法
- springMVC对于controller处理方法返回值的可选类型
- Java 反射
- Java算法---坐标移动
- java中数据持久层查询操作
- JAVA面向对象的思想
- Java之多线程内存可见性_2(volatile不能保证原子性)
- Spring mvc+hibernate+freemarker(实战)
- Java关键字
- eclipse中安装Kotlin插件后的问题
- spring对javamail的封装使用
- java swing设置背景颜色的问题
- Java 定时任务Timer
- java环境配置
- jdk代理
- Levenshtein Distance算法(java实现)
- 轻量级JavaEE企业应用实战(七)
- 使用注解和自定义验证实现Spring MVC表单验证(翻译)
- java资料——哈希表(散列表)(转)
- 转 Java 获取和判断文件头信息