先问你个问题,dbconn是一个连接吗?如果是的话,我没看到连接有executequery这个method,如果不是,那么它是什么?
也许,连接可以用这个method,那么我看唯一的问题就是你的connection没有打开。如果还没发现问题的话。那就用e.printStackTrace();看看吧

解决方案 »

  1.   

    <jsp:useBean id="dbconn" scope="page" class="DBConn.Connection"/>
    在我的JSP页面中有以下两条语句:
       ResultSet rs=dbconn.executeQuery(sql);
       ResultSet rs2=dbconn.executeQuery(sql2);
    运行报的错误为:
    javax.servlet.ServletException: ResultSet is closed
    请问为什么?我是调用Bean通过JDBC与SQL2000连接的。如果只有一个结果集就没事情发生。
      

  2.   

    原因是:在一个STATEMENT申明中只能产生一个RESULTSET实例,当你执行
       ResultSet rs=dbconn.executeQuery(sql);   //1
       ResultSet rs2=dbconn.executeQuery(sql2); //2
    2的时候,已经把1产生的ResultSet rs覆盖了(closed)当你再调用它的时候当然会报错,方法是,再申明一个STATEMENT,和RESULTSET一对一。
      

  3.   

    henry_t(henry_t(小白菜)) :
      但是我是通过JavaBean来操作的,我在里面写了个method(executeQuery)
    我现在是通过先操作完一个rs再操作另一个rs,还有没有别的解决方法啊。
      

  4.   

    这是我用的一个SQL查询函数,一直没出现过问题。public ResultSet openQuery(String str){
        ResultSet rs = null;
        if (str==null||str.trim()==""){
    outPrintln("字符串为空!");
    return null;
        }
        if (conn==null) {
    outPrintln("数据库连接错误!");
    return null;
        }
        try{
    Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
    rs = st.executeQuery(str);
        } catch (Exception e){
    outPrintln("错误信息:"+e.toString());
    return null;
        }
        return rs;
    }
      

  5.   

    一个Statement实例可以重复复用,执行SQL语句,简单应用程序通常只要生成一个Statement。但每个实例在任何时候只允许激活一个SQL命令,因此有时需要生成多个Statement对象。例如,如果应用程序需要在处理上一个查询结果的同时进行新的查询,则需要在两个Statement实例中发出两个查询。(Java专业编程指南)
      

  6.   

    你的method(executeQuery)怎么写的,贴出来看看
      

  7.   

    package DBConn;
    import java.sql.*;public class DBConnection
    {
    Connection dbconn=null;
    ResultSet rs=null;
    Statement stmt=null;
    String sDriver="sun.jdbc.odbc.JdbcOdbcDriver";
    String sConn="jdbc:odbc:java";
    String user="sa";
    String password="";
    public DBConnection() throws Exception
    {
    try
    {
    Class.forName(sDriver);
    dbconn=DriverManager.getConnection(sConn,user,password);
    stmt=dbconn.createStatement();

    }
    catch (ClassNotFoundException E_conn)
    {
    E_conn.printStackTrace();
    }
    }

    public ResultSet executeQuery(String sql)
    {
    rs=null;
    try
    {
    rs=stmt.executeQuery(sql);
    }
    catch (SQLException E_SQL)
    {
        E_SQL.printStackTrace();
    }
    return rs;
    }

    public int executeUpdate(String sql)
    {
    int i=0;
    try
    {
    i=stmt.executeUpdate(sql); 
    }
    catch (SQLException E_Update)
    {
        E_Update.printStackTrace();
    }
        return i;

    }

    }
    /=============================================================
    以下是method(executeQuery)
    /=============================================================
    package DBConn;
    import java.sql.*;public class DBConnection
    {
    Connection dbconn=null;
    ResultSet rs=null;
    Statement stmt=null;
    String sDriver="sun.jdbc.odbc.JdbcOdbcDriver";
    String sConn="jdbc:odbc:java";
    String user="sa";
    String password="";
    public DBConnection() throws Exception
    {
    try
    {
    Class.forName(sDriver);
    dbconn=DriverManager.getConnection(sConn,user,password);
    stmt=dbconn.createStatement();

    }
    catch (ClassNotFoundException E_conn)
    {
    E_conn.printStackTrace();
    }
    }

    public ResultSet executeQuery(String sql)
    {
    rs=null;
    try
    {
    rs=stmt.executeQuery(sql);
    }
    catch (SQLException E_SQL)
    {
        E_SQL.printStackTrace();
    }
    return rs;
    }

    public int executeUpdate(String sql)
    {
    int i=0;
    try
    {
    i=stmt.executeUpdate(sql); 
    }
    catch (SQLException E_Update)
    {
        E_Update.printStackTrace();
    }
        return i;

    }

    }
      

  8.   

    不要用公用的Statement,每次查询的时候,都重新定义一个来用。
      

  9.   

    同一个statement产生的resultset无法做嵌套查询,我想你应该是这个问题.
      

  10.   

    我按[cypeng(追命)]的意思改了,现在是页面上什么都没有了。
    package DBConn;
    import java.sql.*;public class DBConnection
    {
    Connection dbconn=null;
    String sDriver="sun.jdbc.odbc.JdbcOdbcDriver";
    String sConn="jdbc:odbc:java";
    String user="sa";
    String password="";
    public DBConnection() throws Exception
    {
    try
    {
    Class.forName(sDriver);
    dbconn=DriverManager.getConnection(sConn,user,password);

    }
    catch (ClassNotFoundException E_conn)
    {
    E_conn.printStackTrace();
    }
    }

    public ResultSet executeQuery(String sql) throws SQLException
    {
    ResultSet rs=null;
    Statement stmt=null;
    stmt=dbconn.createStatement();
    try
    {
    rs=stmt.executeQuery(sql);
    }
    catch (SQLException E_SQL)
    {
        E_SQL.printStackTrace();
    }
    return rs;
    }

    public int executeUpdate(String sql) throws SQLException
    {
    int i=0;
    Statement stmt=null;
    stmt=dbconn.createStatement();
    try
    {
    i=stmt.executeUpdate(sql); 
    }
    catch (SQLException E_Update)
    {
        E_Update.printStackTrace();
    }
        return i;

    }

    }
      

  11.   

    大家说得都对呀,就是statement对应一个resultset,这是一个好习惯
      

  12.   

    但是我先处理完rs在处理rs2就没事情发生啊。
      

  13.   

    我改了下你写的,你试试看行不行,我也是新手,大家共同进步!
    package DBConn;
    import java.sql.*;public class DBConnection
    {
    Connection dbconn;
             ResultSet rs;
    Statement stmt;
    String sDriver="sun.jdbc.odbc.JdbcOdbcDriver";
    String sConn="jdbc:odbc:java";
    String user="sa";
    String password="";
             boolean isright=false;
    public DBConnection() throws Exception
    {
    try
    {
    Class.forName(sDriver);
    dbconn=DriverManager.getConnection(sConn,user,password);

    }
    catch (ClassNotFoundException E_conn)
    {
    E_conn.printStackTrace();
    }
    }

    public ResultSet executeQuery(String sql) throws SQLException
    {
    rs=null;
    try{
                      dbconn=DriverManager.getConnection(sConn,user,password); stmt=dbconn.createStatement();


    rs=stmt.executeQuery(sql);
    }
    catch (SQLException E_SQL)
    {
        E_SQL.printStackTrace();
    }
    return rs;
    }

    public int executeUpdate(String sql) throws SQLException
    {
    try {
             dbconn=DriverManager.getConnection(sConn,user,password);
             Stmt=Conn.createStatement();
             Stmt.executeUpdate(sql);
             isright=true;
               }
            catch (SQLException E_SQL)
    {
        E_SQL.printStackTrace();

     isright=false;  
       
            }        
            return isright;
        }   
        

    }
      

  14.   

    yxyf00(昕昕点灯):
    你每次执行一个语句都和数据库进行連接,这样不好吧
    dbconn=DriverManager.getConnection(sConn,user,password);
      

  15.   

    还没有解决啊,
    用这个方法也可以解决:
    <jsp:useBean id="dbconn" scope="page" class="DBConn.DBConnection"/>
    <jsp:useBean id="dbconn2" scope="page" class="DBConn.DBConnection"/>
    或者
    先处理完rs再处理rs2也可以(我目前用的,但有时必须要两个同时处理的话那就不管用了。)。但和数据库建多连接(如前面那个方法)了会有性能方面的问题吧。