2013-04-08 110 views
4

即使我没有关闭finally连接,连接也会自动关闭。SQL错误:在java中关闭连接

public String look(long id, String codeName, Connection conn) throws SQLException 
    { 
     try 
     { 
      StringBuffer sel = new StringBuffer().append(property); 
      stmt = conn.prepareCall(sel.toString());   /* fileCode.java:194 */ 

      stmt.setString(1, nameC); 
      stmt.setLong(2, valueI); 
      stmt.registerOutParameter(3, oracle.jdbc.OracleTypes.VARCHAR); 
      stmt.execute(); 

      return stmt.getString(3); 
     } 
     catch (SQLException e) 
     { 
      if (e.getMessage().toUpperCase().contains("NO DATA")) 
      { 
       return "Value not found"; 
      } 
      throw e; 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 

     } 
     finally 
     { 
      System.out.println(" CONNNNNN closed ? : " + conn.isClosed()); 
     } 

    } 

方法调用看起来方法,

public class Verfication 
    { 

    public void verify (, , , , , , ,conn) 
    { 
     try 
     { 
     if (x ==1) 
     { 
      ManageCode mCode = new ManageCode(); 
      System.out.println("----- 1st Call -----"); 
      String mCodeBlock = mCode.look(, , conn); 
      String cCodeBlocked = checkBackup (, , , , , , , ,); 
      /* connection is closed in this part */ 
      System.out.println("----- 2nd Call -----"); 
      String nCodeBlock = mCode.look (, , conn); 
     } 

     }catch( ) 
     { 

     } 

    } 
} 

我得到的输出如下所述,我不知道什么是错的连接?我还添加了系统输出。

输出:

 ----- 1st Call ----- 
    CONNNNNN closed ? : false 

    ----- 2nd Call ----- 
    CONNNNNN closed ? : true 

    SEVERE: Line:71 CodePointChecker ERROR: java.sql.SQLException: Closed Connection 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:227) 
    at oracle.jdbc.driver.PhysicalConnection.prepareCall(PhysicalConnection.java:839) 
    at oracle.jdbc.driver.PhysicalConnection.prepareCall(PhysicalConnection.java:802) 
    at com.XXXXXXXXXXXXXXX.code.fileCode.look(fileCode.java:194) 
+0

也发布'checkBackup'方法的代码。 – 2013-04-08 20:14:25

+0

你也可以发布你的JDBC连接字符串吗? – 2013-04-08 20:20:28

回答

1

由于多种原因,JDBC连接可能会关闭 - 不仅仅是您故意的。这就是为什么有那么多连接池实现的原因。

我看到连接关闭,因为连接运行的端口已关闭。我看到连接关闭仅仅是因为数据库感觉像(大多数情况下与Oracle有关)。

当然 - 最明显的可能性是你无意中关闭连接 - 也许在另一个线程中。

道德 - 使用正确连接池。它会为你节省很多的痛苦。

0

它必须是一些与您的SQL查询被烧成一个SQLException导致连接被关闭回事。

+0

哪些SQLExceptions导致连接关闭? – EJP 2013-04-09 00:44:20