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

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


  • 相关阅读:
    c++ bitset 操作
    c++ vector 使用方法
    功夫熊猫
    [转]PSP机能强大!已能模拟运行WINDOWS系统?
    刚刚发现的Picasa Web已经支持多种格式了。
    刚发现个BUG管理的小软件 BugTracker.NET
    [转]基于WEB的操作系统
    26岁生日了
    中华香烟真假辨别
    [转]软件史上最伟大的十大程序员
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/7351192.html
Copyright © 2020-2023  润新知