package bean;
import java.sql.*;
public class databaseBean{  private String DBLocation ="jdbc:odbc:drug_datasource"; //ODBC:DSN
  private String User ="sa";
  private String Password ="sa";
  private String DBDriver ="sun.jdbc.odbc.JdbcOdbcDriver";  //jdbc-odbc驱动程序
  private ResultSet rs =null;
  private Connection conn =null;/** 构造函数 **/
public databaseBean(){
}
///
public void executeUpdate(String sql)
{
  if(conn ==null){
    DBConnect();
  }  if(conn ==null){
    return;
  }
  else{
    try{
      Statement s =conn.createStatement();
         // System.out.println(sql);
      s.executeUpdate(sql);
    }
    catch(SQLException e){e.printStackTrace();
    }
  }}
public ResultSet executeQuery(String sql)
{
  if(conn ==null){
    DBConnect();
  }  if(conn ==null){
    rs =null;
  }
  else{
    try{
      Statement s =conn.createStatement();
      rs =s.executeQuery(sql);
    }
    catch(SQLException e){e.printStackTrace();
  }
}
return(rs);
}
///
public String DBConnect()
{
  String strExc ="";
  try{
    Class.forName(DBDriver);
    conn =DriverManager.getConnection(DBLocation,User,Password);
  }
  catch(ClassNotFoundException e){
    strExc =e.toString();
  }
  catch(SQLException e){
    strExc =e.toString();
  }
  return(strExc);
}
/**
 设置一个可用的数据地址
 */
public void setDBLocation(String location){
  DBLocation =location;
}
/**
 设置一个可用的数据库连接
 */
public void setconn(Connection con){
  conn =con;
}
/**
 设置一个JDBC驱动程序
 */
public void setDBDriver(String driver){
  DBDriver =driver;
}
/**
 设置一个User
 */
public void setUser(String user){
  User =user;
}
/**
 设置User的Password
 */
public void setPassword(String pw){
  Password =pw;
}
/**
 获得当前的数据源地址
 */
public String getDBLocation(){
  return(DBLocation);
}
/**
 获得当前的JDBC驱动器
 */
public String getDBDriver(){
  return(DBDriver);
}
/**
 获得当前的结果记录集
 */
public ResultSet getRS(){
  return(rs);
}
/**
 获得当前的数据库连接
 */
public Connection getconn(){
  return(conn);
}public void close(){
  try {
    conn.close();
    rs.close();
  }
  catch (Exception e) {
    e.printStackTrace();
  }
}}///:~
原代码如下,每次我查询完后,调用close();都会出现ResultSet未关闭的异常

解决方案 »

  1.   

    错,会出现ResultSet已关闭的异常
      

  2.   

    是啊,一般情况下关闭是不会出现异常的,要插到程序为什么会出现异常。
    另外,关闭连接一般都在finally里面做。
      

  3.   

    public void close(){
      try {
        conn.close();
        rs.close();
      }
      catch (Exception e) {
        e.printStackTrace();
      }
    }应该rs.close();先
    再conn.close();
    虽然没写过你这样的写法,但觉得这样是错的
      

  4.   

    同意楼上的说法。一般说来,conn关闭后,rs就会自动关闭的。
    不过,如果先关闭conn,再关闭rs就会报错的。