5

即使我没有关闭 finally 块,连接也会自动关闭。

 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() ); 
        }

    }

方法调用look方法,

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

它一定是您的 SQL 查询发生的事情,它触发了一个导致连接关闭的 SQLException。

于 2013-04-08T20:14:55.693 回答