zoukankan      html  css  js  c++  java
  • 将查询到的数据存到excel并下载

    将查询到的数据存到excel并下载

    jxl.jar

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

    原理分析:首先要进行数据查询,数据查询少不了对数据库的连接配置,就不详细叙述了。

    第二,将查询到的数据写入到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,所以信息都写入文件,关闭文件并且关闭数据库连接。

    一种是通过JDBC(转载)

    下面的两个类一个是用来连接数据库的,一个是用来将数据库中的东西查询并导入execl的。

    文件一,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;
    /**
     * 主要是用来创建excel工作薄
     */
    public class MysqlToExcelUp {
     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里,Label(i,j,s)表示i列j行添加s,s必须是String
       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();
      }
      
     }
    }

    一种是通过mybatis

    //pojo 文件

    package pojo;
    
    import java.io.Serializable;
    public class Province  extends AbstractPojo implements Serializable {
    private int id;
    private String name;
    public Province() {
    super();
    // TODO Auto-generated constructor stub
    }
    public int getId() {
    return id;
    }
    public void setId(int id) {
    this.id = id;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    }

    //mapper文件

    <select id="sel_for_excel"   resultType="pojo.Province">
     select *  from table
     </select>

    //configuration文件

    <configuration>
    <properties>
                                        //连接数据库配置
    <property name="driver" value="org.postgresql.Driver"/>
    <property name="url" value="jdbc:postgresql://127.0.0.1:5432/Database"/>
    <property name="username" value="postgres" />
    <property name="password" value="****" />
    </properties>
    
    <environments default="postgres">
    <environment id="postgres">
    <transactionManager type="JDBC" />
    <dataSource type="POOLED">
    <property name="driver"   value="${driver}" />
    <property name="url"      value="${url}" />
    <property name="username" value="${username}" />
    <property name="password" value="${password}" />
    </dataSource>
    </environment>
    </environments>
    <mappers>
    <mapper resource="mybatis/mappers/test.xml"/>
    </mappers>
    </configuration>

    //java测试

    首先连接数据库,建立session

    package database;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    public class databaseOperator {
    
    public databaseOperator() {
    // TODO Auto-generated constructor stub
    }
    
    /**
    * @param args
    */
    private static SqlSessionFactory ssf=null;
    static Logger logger=Logger.getLogger("DatabaseOperator");
    @SuppressWarnings("unused")
    private static void initalFactory() throws IOException{
    String resource="mybatis/configuration.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    ssf=new SqlSessionFactoryBuilder().build(inputStream);
    }
    public static SqlSession getSession(){
    if(ssf==null){
    try{
    initalFactory();
    }catch (IOException e) {
    // TODO: handle exception
    e.getStackTrace();
    }
    }
    return ssf.openSession();
    }
    }

    然后操作数据库

    package database;
    
    import java.io.File;
    import java.io.IOException;
    import java.sql.SQLException;
    import java.util.ArrayList;
    
    import org.apache.ibatis.session.SqlSession;
    
    import pojo.Province;
    
    import jxl.Workbook;
    import jxl.write.Label;
    import jxl.write.WritableSheet;
    import jxl.write.WritableWorkbook;
    
    public class sqlToExcel {
    
    public void WriteExcel(File fileName,ArrayList rs) throws Exception{
     
     WritableWorkbook wwb = null;
     WritableSheet ws = null;
     String[] title = { "id", "provice"}; 
     String[] sh = { "date", "power"}; 
     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 (i = 0; i < title.length; i++) {   
           //添加表头
           ws.addCell(new Label(i, 0, title[i]));   
      }
     for(j=0;j<rs.size();j++){
      //依次添加数据库中查询到的数据到excel中
      Province re=(Province) rs.get(j);
      String date=((Integer)re.getId()).toString();//int没法转换为string
      ws.addCell(new Label(0, j+1 ,date));
      ws.addCell(new Label(1, j+1,re.getName()));
    
     }
     wwb.write();//写入工作薄
     wwb.close();//关闭工作薄
     rs.clear();//关闭结果集
    }
     
    public static void main(String[]args){
     sqlToExcel mexel = new sqlToExcel();
     databaseOperator db=new databaseOperator();
     SqlSession session=null;
     String sql = "test.sel_pro";
     ArrayList rs = null;
     File newFile = new File("c:\test.xls");
     try {
      session=db.getSession();
      rs=(ArrayList) session.selectList(sql);
     } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
     try {
      mexel.WriteExcel(newFile , rs);
     } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
     try {
      session.close();
      //关闭数据库连接
     } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
     
    }
  • 相关阅读:
    左旋转字符串
    mybitis实现增,删,改,查,模糊查询的两种方式:(1)
    使用MYSQL时遇到的问题解决方法
    mysql的使用命令(1)
    matlab_exercise(4)----第一题
    matlab_exercise(3)----海伦公式求三角形面积
    matlab_exercise(2)----输入一个三位数,依次输出其个位数字,十位数字,百位数字
    matlab_exercise(1)--交换值
    [xPlugins] jQuery Contextmenu右键菜单
    [网站安全] 十大抢手的网站压力测试工具
  • 原文地址:https://www.cnblogs.com/yoyo24456/p/3663828.html
Copyright © 2011-2022 走看看