关于jsp无法连接mysql的问题

前几天用jsp连接数据库时可以正常连接数据库输出查询内容,前天忽然输出不出来了,我重启了电脑之后,又可以正常输出了,可今天忽然又不能输出查询内容

这是我编写的数据库通用类,链接数据库的通用类我就不贴上来了,已经确认过可以连接成功

 package dbutil;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Conndb {
    //执行select语句
    //@param sql
    //@return
    //@throws Exception
    public ResultSet executeQuery(String sql) throws Exception{
        System.out.println("conn00");
        ResultSet rs=null;
        Connection con=null;
        Statement st=null;
        try {
            con=conn.getConnection();
            System.out.println("conn11");
            st=con.createStatement();
            System.out.println("conn12");
            rs=st.executeQuery(sql);
        } catch (SQLException e) {
            throw e;
        } finally{
            DBclose.close(rs,st,con);
        }
        return rs;
    }

    //执行insert,update,delete语句
    //@param sq;
    //@throw Exception
    public void executeUpdate(String sql) throws Exception{
        Connection con=null;
        Statement st=null;
        try {
            con=conn.getConnection();
            st=con.createStatement();
            st.executeUpdate(sql);
        } catch (SQLException ex) {
            ex.printStackTrace();
            System.out.println("执行SQL语句出错:"+ex.getMessage());
        } finally{
            DBclose.close(st,con);
        }
    }

}

这是要执行的jsp语句,可以确定if(rs!=null){开始不执行的,控制台也没有报错

 <body>
  <%@page import="dbutil.Conndb" %>
  <%@page import="dbutil.DBclose" %>
    <%
        request.setCharacterEncoding("utf8");
//      String cla=request.getParameter("cla");
        String cla="软件技术四班";
        int id;
        String s_name;
        String t_name;
        String sql=null;
        Connection con=null;
        Statement st=null;
        ResultSet rs=null;
        StringBuffer buffer = new StringBuffer();

        try {
            sql="select student.s_id,s_name,t_name from ts,student,team where student.s_id=ts.s_id and team.t_id=ts.t_id and ts.s_id in (select s_id from student where c_id in(select c_id from class where c_name='"+cla+"'))";
            Conndb Conndb=new Conndb();
            rs=Conndb.executeQuery(sql);
            System.out.println("conn");
            if(rs!=null){
                buffer.append("<table width=100% height=15% border=2 cellspacing=0>");
                buffer.append("<tr><td>学生id</td><td>学生姓名</td><td>加入社团</td></tr>");
                while(rs.next()){
                    System.out.println("conn2");
                    id=rs.getInt("s_id");
                    s_name=rs.getString("s_name");
                    t_name=rs.getString("t_name");
                    buffer.append("<tr><td>"+id+"</td>");
                    buffer.append("<td>"+s_name+"</td>");
                    buffer.append("<td>"+t_name+"</td></tr>");
                }
                buffer.append("</table>");
            }
        } catch (Exception e) {
        %>
            <script type="text/javascript">
                alert("出现问题,请重新输入");
            </script>
        <%
        } finally{
            DBclose.close(rs,st,con);
        }

而另一个原来能正常运行的jsp页面报错"java.sql.SQLException: Operation not allowed after ResultSet closed"

 String sql="select*from team where t_id='"+id+"'";
    Conndb Conndb=new Conndb();
    rs=Conndb.executeQuery(sql);
    if(rs!=null){
        while(rs.next()){
            id=rs.getString("t_id");
            name=rs.getString("t_name");
            teacher=rs.getString("t_teacher");
            time=rs.getString("t_time");
            office=rs.getString("t_office");
        }
    }

9个回答

        DBclose.close(rs,st,con);

这段代码,你查询后,resultSet已经关闭了,但是你又对它遍历了,所以报错了,不允许这种操作

Royal_lr
Royal_lr 回复liruo233: 用完之后再关闭啊
接近 2 年之前 回复
liruo233
liruo233 那应该怎么办,直接不关闭吗
接近 2 年之前 回复

还是有一些代码逻辑隐患,报错是数据集已经被关闭了,不能操作

liruo233
liruo233 可是我写了好多个JSP页面,只有这一个页面报错,还有,我是新手,看不出哪有逻辑错误
接近 2 年之前 回复

应该是你有共用了数据集,但是前一个过程关闭了ResultSet ,但是后面又调用了它,导致报错!看一下关闭数据集的逻辑!是否存在问题!

恕我直言,我不建议你再写这样的代码,把获取数据结果的代码写在java类中。页面跳转时,放结果在request域,页面直接排版,取数。

你的ResultSet(结果集)已经被关闭了,关了后就不允许操作了

exectquery方法报错进去异常了,然后close了,排查一下查询

exectquery finally的代码去掉

安装时指定的规则或默认的规则

exectquery方法有问题,运行到这里出错了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!