Java将数据库数据导入Excel

本程序全部是用Java EE编程的,由于是数据测试,所以没有使用jsp来操作,因为jsp的将数据库导入到Excel是同样的道理。

原理分析:首先要进行数据查询,数据查询少不了对数据库的连接配置,就不详细叙述了。大家都会,不管是mysql还是oracle或者其他数据库操作,都是要建立连接。

第二,将查询到的数据写入到excel,这里包括两个部分,首先是要创建一个excel的工作薄,并且创建工作表;然后就是利用循环将查询到的数据压入excel中。看似简单,实则有很多步骤要走。

a,要利用java操作excel。要添加jxl.jar的库文件到 web-inf下的lib包下面,这样关于excel的编程操作都能够进行,(如何下载?)自己解决。

b,因为是对文件的操作,所以要注意 java.io流文件操作的知识,创建的文件路径,文件名等问题需要注意。

c,将查询到的数据文件要循环写入excel中,不管你查询到的是list集合类还是resultset结果集,都需要循环传入,list的有点是能够快速传入,不需要坐特别的处理,但是由于没有字段属性,所以要自己在excel的样式设置上进行控制。ResultSet结果集的好处是能够直接利用数据库的rs.getMetaData()方法进行属性,行列等的操作,当然因为是直接与数据库打交道,就在效率以及安全性上是差的。

d,所以信息都写入文件,关闭文件并且关闭数据库连接。

下面的两个类一个是用来连接数据库的,一个是用来将数据库中的东西查询并导入execl的。测试用的是mysql数据库/dataconsole数据库下的 gcghandover表。要修改自己动手。

文件一,jdbc 连接。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JDBCConn {

 /**
  * @param args
  * @throws ClassNotFoundException
  * @throws SQLException
  */
 public Connection getConnection() {

  String driver = "com.mysql.jdbc.Driver";
  String url = "jdbc:mysql://127.0.0.1:3306/dataconsole";
  String user = "root";
  String password = "1qazxsw2";
  Connection conn = null;

  try {
   Class.forName(driver);
  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  try {
   conn = DriverManager.getConnection(url, user, password);
   if (!conn.isClosed())
    System.out.println("Succeeded connecting to the Database!");
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return conn;
 }
}

文件二,生成excel文件

import java.io.File;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

/**
 * @version 1.0
 * @author zhwenq
 * 主要是用来创建excel工作薄
 */
public class MysqlToExcelUp {

 /**
  * 按照数据库中查询到的结果集创建一个新的工作薄,建议传入参数为Resultset结果集
  * 
  * @param fileName 包含文件的路径以及文件名
  * @param rs
  * @throws Exception
  */
 public void WriteExcel(File fileName,ResultSet rs) throws Exception{
  
  //创建一个新的工作薄,fileName 包含了文件名以及路径。
  WritableWorkbook wwb = null;
  WritableSheet ws = null;
  try {
   wwb = Workbook.createWorkbook(fileName);
    ws = wwb.createSheet("sheettest", 0);//给工作薄添加一个工作表,命名为 sheettest.
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
  
  int i = 0;
  int j = 0;
 
  //下面for循环里面的rs.getMetaData().GetColumnCount() 获取数据库中某个表的列总数
  for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) 
  {
   //rs.getMetaData().getColumnName()获取表的列名。并添加到 excel表Label里
   ws.addCell(new Label(k, 0, rs.getMetaData().getColumnName(k + 1)));
  }
  while (rs.next()) {
   //算法,依次添加数据库中所有符合的数据到excel中
   for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) {
    ws.addCell(new Label(k, j + i + 1, rs.getString(k + 1)));
   }
   i++;
  }
  wwb.write();//写入工作薄
  wwb.close();//关闭工作薄
  rs.close();//关闭结果集
 }
 
 public static void main(String[]args){
  MysqlToExcelUp mexel = new MysqlToExcelUp();
  JDBCConn myjdbc = new JDBCConn();
  myjdbc.getConnection();
  String sql = "select * from gcghandover";
  Statement stm = null;
  ResultSet rs = null;
  File newFile = new File("c:\\gcghandover.xls");
  try {
   stm = myjdbc.getConnection().createStatement();
   rs = stm.executeQuery(sql);
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  try {
   mexel.WriteExcel(newFile , rs);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  try {
   myjdbc.getConnection().close();
   //关闭数据库连接
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
 }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值