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

请教一下jsp高手
String str="";
 private void tree(Connection conn,int id,int level){
Statement stmt=null;
ResultSet rs=null;
String preStrce="";
for(int i=0;i<level;i++){
preStrce +="----";
}
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>"+
preStrce+"<a href=ShowAriticleDetail.jsp>"+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;
}
}catch(SQLException e){
e.printStackTrace();
}
}
 }
 %>

------解决方案--------------------
引用
1. sql有问题, select*from...。。少了空格改为select * from,也可以这样select *from,sql规范一点。。
2. if(rs.getInt("isleaf")!=0){ tree(conn,rs.getInt("id"),level+1); },连接数据库不要写在递归里面。。因为你每次程序执行到这一步时,数据库连接并没有关闭。。一个连接里面可以执行多次操作。。并不是只能一次。。。
3. while(rs.next()){}这个循环里面尽量不要用html标签。。程序混乱。。维护性极差。。
4. finally中关闭连接的顺序应该是:先关ResultSet,其次Statement,最后才是Connection。。。