tomcat5.5配置的连接池中
链接怎么关闭不了呢? 关闭链接代码如下
public void dbClose()
{
     try { 
      rs.close(); 
                    stmt.close();                     
                      conn.close(); 
                    
             }catch (SQLException e) 
     { 
                    System.out.println(e); 
             }
if (rs != null)         System.out.println("rs exist");
else  System.out.println("rs closed");
                if (stmt != null)     System.out.println("stmt exist");
else  System.out.println("stmt closed");                  
                if (conn != null)     System.out.println("conn exist");
else  System.out.println("conn closed");  
}

解决方案 »

  1.   

    数据库链接的全部代码如下:public class SqlConn
    {
       
     public DataSource   ds=null;   
         public Connection   conn=null;   
           public Statement   stmt=null;   
         public  ResultSet   rs=null;   
      public SqlConn() throws SQLException
    {
     
     getStatement();
    }
    public Statement getStatement() throws SQLException
    {
      
        
        try
        {
        Context ctx = new InitialContext();
        ds = (DataSource) ctx.lookup("java:comp/env/jdbc/sqlserver");
         if (ds != null)
         {
              conn = ds.getConnection();
         }
       
        }catch(Exception e)
        {
         e.printStackTrace();
        }
        stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
    ResultSet.CONCUR_READ_ONLY);
        return stmt;
    } public ResultSet getResultset(String sql) throws SQLException
    {
    //stmt=getStatement();
    rs = stmt.executeQuery(sql);
    return rs;
    } public int executeSql(String sql) throws SQLException
    {
    //stmt=getStatement();
    int rs = stmt.executeUpdate(sql); return rs;
    } public void dbClose()
    {
    //System.out.println("dbclose");
         try { 
          rs.close(); 
                        stmt.close();                     
                          conn.close(); 
                        
                 }catch (SQLException e) 
         { 
                        System.out.println(e); 
                 }
    if (rs != null)         System.out.println("rs exist");
    else  System.out.println("rs closed");
                    if (stmt != null)     System.out.println("stmt exist");
    else  System.out.println("stmt closed");                  
                    if (conn != null)     System.out.println("conn exist");
    else  System.out.println("conn closed");  
    }

    }
    每次调用 这个dbClose方法的时候,控制台都答应出...  exist
      

  2.   

    最重要的是它报错如下:
    java.lang.NullPointerException
    at ssh.SqlConn.getStatement(SqlConn.java:46)
    at ssh.SqlConn.<init>(SqlConn.java:25)
    at org.apache.jsp.index_jsp._jspService(index_jsp.java:87)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Unknown Source)
      

  3.   

    关闭连接一般在finally里做
    finally {
    try {
    if (rs != null) {
    rs.close();
    rs = null;
    }
    }
    catch (SQLException e) {
    e.printStackTrace();
    }
    try {
    if (cs != null) {
    cs.close();
    cs = null;
    }
    }
    catch (SQLException e) {
    e.printStackTrace();
    }
    try {
    if (con != null) {
    con.close();
    con = null;
    }
    }
    catch (SQLException e) {
    e.printStackTrace();
    }
    }
      

  4.   

    java.lang.NullPointerException 
    空指针最好解决,楼主细心再找一下
      

  5.   

    getStatement()方法里有一个获得statement的语句conn.createStatement();我猜是这句报的空指针楼主可以加一个判断if(null !=conn)
       stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);    
    else
       System.out.println("随便打点东西");
    就可以看到了至于这个为什么为空,应该是看连接池的配置了呵呵不知道我猜的对不对