2013-04-08 4 views
4

finally 블록을 닫지 않아도 연결이 자동으로 닫힙니다.SQL 오류 : 닫힌 연결

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 메소드의 코드를 게시하십시오. –

+0

JDBC 연결 문자열도 게시 할 수 있습니까? –

답변

1

JDBC 연결은 여러 가지 이유로 닫을 수 있습니다. 이것이 거기에 많은 연결 풀 구현이있는 이유입니다.

연결이 실행 중이던 포트가 닫혀 있기 때문에 연결이 끊어졌습니다. 데이터베이스가 (대개이 경우 Oracle과 함께 사용 된 것)처럼 느껴졌 기 때문에 연결이 닫힌 것 같습니다. .

물론 가장 확실한 가능성은 다른 스레드에서 실수로 연결을 닫는 것입니다.

도덕 - 연결 풀을 사용하십시오. 그것은 당신에게 많은 슬픔을 덜어 줄 것입니다.

0

이 폐쇄되는 연결을 일으키는에서 SQLException 발사 귀하의 SQL 쿼리와 함께 계속 일해야합니다.

+0

어떤 SQLException이 연결을 닫게합니까? – EJP