日期:2014-05-20  浏览次数:20661 次

POI导出数据库信息到EXCEL的小问题~~
思路是:jsp导出数据库学生信息到excel~先用了个下拉框选择了要导出的信息的班级~下拉框中有班级号“086”和“087”还有一个“全部”。然后根据下拉框的值从数据库中select然后POI导出
现在我选086和087导出excel都没问题~但选择全部的话导出的excel只有表头~底下的内容是空的!
请大虾们指点!!~~谢谢~!!~
下面是部分代码~~
Java code
<% 
response.setContentType("text/html; charset=GBK"); 
request.setCharacterEncoding("GBK"); 
%>

<%
String checkclass=request.getParameter("class");
//out.println(checkclass);

%>
 
<%
 Class.forName("com.mysql.jdbc.Driver");//加载JDBC驱动程序 
        Connection con=DriverManager.getConnection( 
        "jdbc:mysql://localhost:3306/suser?user=root&password=nina900416");//连接数据库
        Statement stmt=con.createStatement();
String sql;        
if(checkclass!="all") //class不为all的时候
sql ="select sno,sname,sclass,sid,ssex,ssty,sut,sbir,szz,ssy,dept,spy,tel from student where sclass='"+checkclass+"'";
else sql="select * from student";//class为all的时候

//String sql ="select * from student " ;
 ResultSet rs = con.createStatement().executeQuery(sql) ;
 // 获取总列数

 int CountColumnNum = rs.getMetaData().getColumnCount() ;

 int i =1 ;
 // 创建Excel文档
 HSSFWorkbook wb = new HSSFWorkbook() ;
 // sheet 对应一个工作页
 HSSFSheet sheet = wb.createSheet("student表中的数据") ;
 HSSFRow firstrow = sheet.createRow(0); //下标为0的行开始
 HSSFCell[] firstcell = new HSSFCell[CountColumnNum];
 String[] names ={"学号","姓名","班级","身份证号","性别","学生类别","民族","出生日期","政治面貌","生源地","专业","培养方式","手机号"};

 for(int j=0;j<CountColumnNum; j++){
 firstcell[j] = firstrow.createCell((short)j);
 firstcell[j].setCellValue(new HSSFRichTextString(names[j]));
 }

 while(rs.next())
 {
 // 创建电子表格的一行
 HSSFRow row = sheet.createRow(i) ; // 下标为1的行开始
 
 for(int p=0;p<CountColumnNum;p++)
 {
 // 在一行内循环
 HSSFCell cell = row.createCell((short) p) ;
 // 设置表格的编码集,使支持中文
 //// 先判断数据库中的数据类型
 // 将结果集里的值放入电子表格中
 cell.setCellValue(new HSSFRichTextString(rs.getString(p+1))) ;
 }
 i++ ;
 }
 %>
<% //获得系统时间,用于命名
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyyMMdd_HHmmss");
java.util.Date currentTime = new java.util.Date();//得到当前系统时间
String str_date1 = formatter.format(currentTime); //将日期时间格式化 
//out.println(str_date1);
%>
 <%
 // 创建文件输出流,准备输出电子表格
 OutputStream outp = new FileOutputStream("D:\\"+checkclass+"学生信息导出"+str_date1+".xls") ;
 wb.write(outp) ;
 outp.close() ;
 out.println("<script language='javaScript'>alert('"+checkclass+"学生信息导出成功');</script>");                           
                response.setHeader("refresh","1;url=excel_choose.jsp");

 rs.close() ;
 con.close() ;
 
%>


------解决方案--------------------
checkclass!="all"

字符串不是你这样比较的。用equals

你这样当然全是true了,只有执行前面那条语句了。
但当为all的时候,你前面那条语句的checkclass为空字符串,所以在数据库里一条都没找到。