数据库连结被关闭了,你是不是还在别的地方使用了rs1 或者 rs2 ?

解决方案 »

  1.   

    ResultSet rs1 = data.executeQuery(sql1);你的data已经被关闭了。试着查对应的demo.database代码。
      

  2.   

    ResultSet rs1 = data.executeQuery和ResultSet rs2 = data.executeQuery这两处都是使用的data,你分别定义,比如rs1的使用data1,rs2的使用data2,这样。
    还有就是,你这种嵌套的rs方式也容易产生问题。不推荐使用。可以改成多表查询的方式来解决。
      

  3.   

    ********连接数据库的bean************
    package demo;import java.io.PrintStream;
    import java.io.UnsupportedEncodingException;
    import java.sql.*;public class database
    {    private Connection conn;
        private Statement stmt;
        private ResultSet rs;
        private int resultNum;
        String CLASSFORNAME;
        String SERVANDDB;
        String USER;
        String PWD;    public database()
        {
            conn = null;
            stmt = null;
            rs = null;
            resultNum = 0;
            CLASSFORNAME = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
            SERVANDDB = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=***";
            USER = "***";
            PWD = "***";
            try
            {
                try
                {
                    Class.forName(CLASSFORNAME);
                }
                catch(ClassNotFoundException classnotfoundexception) { }
                conn = DriverManager.getConnection(SERVANDDB, USER, PWD);
                stmt = conn.createStatement();
            }
            catch(SQLException sqlexception)
            {
                sqlexception.printStackTrace();
            }
        }    public Connection getConnection()
        {
            return conn;
        }    public ResultSet executeQuery(String s)
        {
            rs = null;
            try
            {
                rs = stmt.executeQuery(s);
            }
            catch(SQLException sqlexception)
            {
                System.out.println("Query error:" + sqlexception.getMessage());
            }
            return rs;
        }    public int executeUpdate(String s)
        {
            resultNum = 0;
            try
            {
                resultNum = stmt.executeUpdate(s);
            }
            catch(Exception exception)
            {
                System.err.println("Update error:" + exception.getMessage());
            }
            return resultNum;
        }    public void close()
        {
            try
            {
                if(rs != null)
                {
                    rs.close();
                    rs = null;
                }
                if(stmt != null)
                {
                    stmt.close();
                    stmt = null;
                }
                if(conn != null)
                {
                    conn.close();
                    conn = null;
                }
            }
            catch(SQLException sqlexception)
            {
                System.out.println("close error: " + sqlexception.getMessage());
            }
        }
    }
    **********************************
    首页显示就那些代码~帮帮忙吧~T_T
      

  4.   

    错误原因是:你用了嵌套的查询。你的database类不支持嵌套的查询。
    因为你所有的查询公用一个Statement, Statement只能用于一个ResultSet,执行第2个查询时自动关闭了前一个ResultSet。
    ResultSet rs1 = data.executeQuery(sql1);
    while(rs1.next()){
    ...
    ResultSet rs2 = data.executeQuery(sql2); // !!在这一步自动把rs1关闭了!!
    while(rs2.next()){
    ...
    }
    rs2.close();
    }
    rs1.close();
      

  5.   

    to: jiafcat()
    多谢大哥指点~请问有什么办法可以解决吗?
      

  6.   

    jiafcat() 和我说的一样嘛,嘿嘿
      

  7.   

    这么解决。
    stmt这个就是bean里面,在你用rs2的时候,先定义一下Statement stmt1 = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);这重新定义一个新的stmt1就可以了,当然要在rs2完成后stmt1.close();
      

  8.   

    把Bean里的查询改一下  
     public ResultSet executeQuery(String s)
        {
            rs = null;
            try
            {
       Statement stmt1 = conn.createStatementResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);            rs = stmt1.executeQuery(s);
            }
            catch(SQLException sqlexception)
            {
                System.out.println("Query error:" + sqlexception.getMessage());
            }
            return rs;
        }
      

  9.   

    to jiafcat() 
    不好意思大哥,俺给忘了,谢谢指点~也谢谢大家的参与~小弟这里先谢过了~