一个简单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进行操作