package firm;
import java.sql.*;public class firm {
  String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
  String sConnStr = "jdbc:odbc:firm";
  private Connection conn = null;
  private Statement stmt = null;
  ResultSet rs = null;  public firm() {
    try {
      Class.forName(sDBDriver); 
    }
    catch(java.lang.ClassNotFoundException e) {
      System.err.println("firm(): " + e.getMessage());
    }
  }
  
  public ResultSet executeQuery(String sql) {
    rs = null;
    try {
    conn = DriverManager.getConnection(sConnStr); 
    stmt = conn.createStatement();
    rs = stmt.executeQuery(sql);
    } 
    catch(SQLException ex) { 
      System.err.println("aq.executeQuery: " + ex.getMessage());
    }
    return rs;
  }
  
  public void executeUpdate(String sql) {
    stmt = null;
    rs=null;
    try {
    conn = DriverManager.getConnection(sConnStr); 
    stmt = conn.createStatement();
    stmt.executeQuery(sql);
    stmt.close();
    conn.close();
    } 
    catch(SQLException ex) { 
      System.err.println("aq.executeQuery: " + ex.getMessage());
    }
  }  public void closeStmt(){
    try{
      stmt.close();
     }
    catch(SQLException e){
      e.printStackTrace();
     }
  }
  public void closeConn(){
    try{
      conn.close();
     }
    catch(SQLException e){
      e.printStackTrace();
     }
  }
}

解决方案 »

  1.   

    在类中写一个关闭rs.stmt,conn的方法
    然后再jsp中调用就可以了!
      

  2.   

    Statement stmt = conn.createStatement();
    这个是局部变量,在你的public ResultSet executeQuery(String sql)执行完以后就自动关闭了
    我怀疑你是否能用你的ResultSet取得数据?
    所以你的stmt不能关闭吧
      

  3.   

    package test;import java.sql.*;public class faq {String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
    String sConnStr = "jdbc:odbc:faq";
    Connection conn = null;
    ResultSet rs = null;public init() {
     try {
       Class.forName(sDBDriver);  }
    catch(java.lang.ClassNotFoundException e) {
    System.err.println(e.getMessage());
    }
    }
        public ResultSet executeQuery(String sql) {
           rs = null;
            try {
                
                Statement stmt = conn.createStatement();
                rs = stmt.executeQuery(sql);             } 
              catch(SQLException ex) { 
                  System.err.println("aq.executeQuery: " + ex.getMessage());
                 }
                 return rs;      }
        public ResultSet updataQuery(String sql) {
             rs = null;
              try {
             conn = DriverManager.getConnection(sConnStr); 
             Statement stmt = conn.createStatement();
            stmt.executeUpdate(sql);
         
             } 
            catch(SQLException ex) { 
           System.err.println("aq.executeQuery: " + ex.getMessage());
             }
            return rs;         }
    }
      

  4.   

    import java.sql.*;
    public class faq {
    String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
    String sConnStr = "jdbc:odbc:faq";
    Connection conn = null;
    ResultSet rs = null;
    Statement stmt = null;
    public init() {
    try {
    Class.forName(sDBDriver); 
    conn = DriverManager.getConnection(sConnStr); 
    }
    catch(java.lang.ClassNotFoundException e) {
    System.err.println("faq(): " + e.getMessage());
    }
    }
        public ResultSet executeQuery(String sql) {
           rs = null;
            try {
                
                stmt = conn.createStatement();
                rs = stmt.executeQuery(sql);             } 
              catch(SQLException ex) { 
                  System.err.println("aq.executeQuery: " + ex.getMessage());
                 }
                 return rs;      }
        public ResultSet updataQuery(String sql) {
             rs = null;
              try {
             stmt = conn.createStatement();
            stmt.executeUpdate(sql);
         
             } 
            catch(SQLException ex) { 
           System.err.println("aq.executeQuery: " + ex.getMessage());
             }
            return rs;         }}
      

  5.   

    import java.sql.*;
    public class faq {
    String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
    String sConnStr = "jdbc:odbc:faq";
    Connection conn = null;
    ResultSet rs = null;
    Statement stmt = null;
    public init() {
    try {
    Class.forName(sDBDriver); 
    conn = DriverManager.getConnection(sConnStr); 
    }
    catch(java.lang.ClassNotFoundException e) {
    System.err.println("faq(): " + e.getMessage());
    }
    }
        public ResultSet executeQuery(String sql) {
           rs = null;
            try {
                
                stmt = conn.createStatement();
                rs = stmt.executeQuery(sql);             } 
              catch(SQLException ex) { 
                  System.err.println("aq.executeQuery: " + ex.getMessage());
                 }
                 return rs;      }
        public ResultSet updataQuery(String sql) {
             rs = null;
              try {
             stmt = conn.createStatement();
            stmt.executeUpdate(sql);
         
             } 
            catch(SQLException ex) { 
           System.err.println("aq.executeQuery: " + ex.getMessage());
             }
            return rs;         }public void Close(){
      try{
    conn.close();
    stmt.close();
    }catch(Exception e){}
    }}
      

  6.   

    public void Close()
    里面
    stmt.close();
    conn.close();
    这样比较好吧!
      

  7.   

    怎么运行的是有结果,但是,还是我的access数据库就出现了一个副本,一直都不关闭。。也就是说没有关闭那个连接啊???
    我的faq.java现在改为:
    package test;
    import java.sql.*;public class faq {
      String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
      String sConnStr = "jdbc:odbc:faq";
      private Connection conn = null;
      private Statement stmt = null;
      ResultSet rs = null;  public faq() {
        try {
          Class.forName(sDBDriver); 
        }
        catch(java.lang.ClassNotFoundException e) {
          System.err.println("firm(): " + e.getMessage());
        }
      }
      
      public ResultSet executeQuery(String sql) {
        rs = null;
        try {
        conn = DriverManager.getConnection(sConnStr); 
        stmt = conn.createStatement();
        rs = stmt.executeQuery(sql);
        } 
        catch(SQLException ex) { 
          System.err.println("aq.executeQuery: " + ex.getMessage());
        }
        return rs;
      }
      
      public void executeUpdate(String sql) {
        stmt = null;
        rs=null;
        try {
        conn = DriverManager.getConnection(sConnStr); 
        stmt = conn.createStatement();
        stmt.executeQuery(sql);
        stmt.close();
        conn.close();
        } 
        catch(SQLException ex) { 
          System.err.println("aq.executeQuery: " + ex.getMessage());
        }
      }  public void closeStmt(){
        try{
          stmt.close();
         }
        catch(SQLException e){
          e.printStackTrace();
         }
      }
      public void closeConn(){
        try{
          conn.close();
         }
        catch(SQLException e){
          e.printStackTrace();
         }
      }
    }
    --------------------
    //用于显示的jsp文件
    <jsp:useBean id="work" scope="page" class="test.faq"/>
    <%String tt;
    ResultSet rs = work.executeQuery("select * from fk order by id");
    while (rs.next()) {
    tt = rs.getString("name");
    out.print("·" + tt+"<br>" );
    }
    rs.close();
    work.closeStmt();
    work.closeConn();
    %>
      

  8.   

    哦,是另外一个jsp文件生产的数据连接没有关闭:
    都是同样的java这个jsp文件是:
    <%@ page contentType="text/html; charset=gb2312" %>
    <%@ page language="java" import="java.sql.*" %>
    <jsp:useBean id="workM" scope="page" class="test.faq"/>
    <%
    String name = new String(request.getParameter("name").getBytes("8859_1"),"GB2312");
    String str[] = name.split(",");for(int i=0;i<str.length;i++)
    {
    String SQL="INSERT INTO fk(name) VALUES('"+str[i]+"')";
    workM.executeUpdate(SQL);
    }
    response.sendRedirect("../main/art01_main.htm");
    %>这里怎么关闭哦????(faq.java同上!)
      

  9.   

    public void close(){
      stmt.close();
      conn.close();
    }这样就可以。
      

  10.   

    不行啊,用这个xecuteUpdate,就关闭不了,tomcat显示信息No ResultSet was produced
      

  11.   

    //这样会比较好些
    public void close(){
      try{
        if(rs!=null){
          rs.close();
        }
        if(stmt!=null){
          stmt.close();
        }
        if(conn!=null){
          conn.close();
        }
      }catch(SQLException sqle){
        System.out.println(sqle.getMessage());
      }catch(Exception ex){
        System.out.println(ex.getMessage());
      }
    }