5

最終ブロックで閉じていなくても、接続は自動的に閉じられます。

 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)
4

2 に答える 2

1

JDBC 接続は、ユーザーが意図的に閉じているだけでなく、さまざまな理由で閉じることができます。これが、非常に多くの接続プールの実装がある理由です。

接続が実行されていたポートが閉じられたため、接続が閉じるのを見てきました。データベースがそのように感じたという理由だけで接続が閉じられるのを見てきました(これは主にOracleで)。

もちろん、最も明白な可能性は、別のスレッドで誤って接続を閉じていることです。

道徳 -適切な接続プールを使用してください。それはあなたをとても悲しませます。

于 2013-04-08T20:25:59.467 に答える
0

接続が閉じられる原因となる SQLException を起動している SQL クエリで何かが起こっている必要があります。

于 2013-04-08T20:14:55.693 に答える