JSP导出Excel文档

今天晚上还真是倒霉,下午接了老师的电话要我搞定一个导出Excel文档的问题,结果搞了一个晚上,大约花了3个小时才搞定,真郁闷.于是我想到一个将这个方法完整的写出来,与大家分享.
        这是基于JSP的,用了一个第三方包jxl.jar,下面我们基于这个包来完成导出.
         首先写一个数据库连接类:
class dbcon{ 
private ResultSet rs;
private int numColumns; 
public dbcon(String sql){
  try{
  //驱动程序名
  String driverName="com.mysql.jdbc.Driver";
  //数据库用户名
  String userName="youraccount";
  //密码
  String userPasswd="youpassword";
  //数据库名
  String dbName="test";
  String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPasswd;
  Class.forName("com.mysql.jdbc.Driver").newInstance();
  Connection connection=DriverManager.getConnection(url);
  Statement statement = connection.createStatement();
  rs = statement.executeQuery(sql);
  //获得数据结果集合
  ResultSetMetaData rmeta = rs.getMetaData();
  numColumns=rmeta.getColumnCount();
  }
  catch(Exception e){
   System.out.println(e);
  }
}
public void setRs(ResultSet rs){
  this.rs=rs;
}
public ResultSet getRs(){
  return rs;
}
public void setNumColumns(int numColumns){
  this.numColumns=numColumns;
}
public int getNumColumns(){
  return numColumns;
}
}
 
         上面这个类完成取出数据的工作,接着我们要将数据写入到Excel中去:

public class writeExcel{

public writeExcel(OutputStream os,String sql) throws Exception {
  dbcon db=new dbcon(sql); 
  WritableWorkbook wwb = Workbook.createWorkbook(os);
  WritableSheet ws = wwb.createSheet("TestSheet1", 0);
  int j=0;
  Label labelC;
 
  while(db.getRs().next()){  
   for(int i=0;i<=db.getNumColumns()-1;i++){
    labelC = new Label(i, j, db.getRs().getString(i+1));
    ws.addCell(labelC);
   }
   j++;
  }
  wwb.write();
  wwb.close();
}
}  
         再写个mian方法测试一下:
public static void main(String[] args)throws Exception{
  File f=new File("kk.xls");
  f.createNewFile();
  new writeExcel(new FileOutputStream(f),"select * from test where name like '%z%'");
}

         到此为止都没有问题,大家不知道有没有注意到我在main方法里测试的哪个sql语句是一个模糊查询的sql语句,下面的问题与此有关.由于我帮老师做的这个系统是JSP做的,我的导出页面在一个jsp文件里,而在前一个查询页面里动态生成一个sql语句然后传给负责导出的页面,这就存在一个问题,要进行 url参数传递,但是当涉及到模糊查询时,程序就出错,后来经过仔细调试,才发现是"%"捣的鬼,"%"无法传递,到网上查了半天,终于有人提示用字符替代的方法,我试了试,终于成功了,真是累死了.
         方法如下,在生成查询的页面,假定sql语句为String exportsql;用replaceall方法exportsql=exportsql.replaceall("%","999999999");在到处页面取出数据后再替换回来就行了.
         还要说明的就是这里作为替代的字符也不是什么都可以的,一些特殊字符如&,^,好象也不行.


你可能感兴趣的:(sql,jsp,mysql,jdbc,Excel)