日期:2014-05-17  浏览次数:20715 次

一个简单BBS页面。。我表都显示出来了。还是报错
我的代码:<%@ page language="java" import="java.util.*" pageEncoding="GBk"%>
<%@ page import="java.sql.*" %>

<%! 
String str = null;
private void tree(Connection conn,int id,int level){
Statement stmt= null;
ResultSet rs = null;
String preStr = "";
for(int i=0; i<level;i++){
preStr += "----";
}

try{
stmt = conn.createStatement();
String sql = "select * from article where pid = "+id;
rs = stmt.executeQuery(sql);
while(rs.next()){
str += "<tr><td>" + rs.getInt("id")+"</td><td>"+
preStr +"<a href='ShowArticleDetail.jsp?id="+rs.getInt("id")+"'>" + 
rs.getString("title") +"</a>"+ "</td></tr>";
if(rs.getInt("isleaf")!= 0){
tree(conn, rs.getInt("id"),level+1);
}

}catch(SQLException e){
e.printStackTrace();
}finally{
try{
if(rs !=null){
rs.close();
rs = null;
}
if(stmt != null){
stmt.close();
stmt = null;
}
if(conn != null){
conn.close();
conn = null;
}
}catch(SQLException e){
e.printStackTrace();
}
}
}
 %>

<%
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost/bbs?user=root&password=admin";
Connection conn = DriverManager.getConnection(url);

Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from article where pid = 0");
try{
while(rs.next()){
str += "<tr><th style=color:#5D10F0;>"+"发贴人"+"</th></tr>"+"<tr><td>"+rs.getInt("id")+"</td><td>"+
"<a href='ShowArticleDetail.jsp?id="+rs.getInt("id")+"'>" + 
rs.getString("title") +"</a>"+ "</td></tr>";
if(rs.getInt("isleaf")!= 0){
tree(conn, rs.getInt("id"),1);
}

}catch(SQLException e){
e.printStackTrace();
}
rs.close();
stmt.close();
conn.close();
 %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=gbk">
  <title>My database xbbs</title>


  </head>
  <body>
<table border="1" >
<%= str %>
<% str=""; %>
</table>
  </body>

</html>
报的错是:java.sql.SQLException: Operation not allowed after ResultSet closed

------解决方案--------------------
你在方法里已经把rs close 掉了,但方法外面还在用。
建一个数据对象
然后先把数据从rs取出来,转成数据对象,放到list里,方法返回list,后面对list进行操作