SQL 错误:Java 中的关闭连接

use*_*725 5 java sql database-connection jdbc sqlexception

即使我没有在 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() ); 
        }

    }
Run Code Online (Sandbox Code Playgroud)

方法调用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(    )
      {

      }

    }
}   
Run Code Online (Sandbox Code Playgroud)

我确实得到了下面提到的输出,我不确定连接有什么问题?我还添加了系统输出。

输出:

     ----- 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)
Run Code Online (Sandbox Code Playgroud)

Old*_*eon 1

JDBC 连接可能因多种原因而关闭 - 不仅仅是您故意关闭。这就是为什么有如此多的连接池实现。

我看到连接关闭,因为连接运行的端口已关闭。我曾见过连接关闭只是因为数据库感觉如此(主要是使用 Oracle)。

当然 - 最明显的可能性是您在其他地方意外关闭连接 - 也许在另一个线程中。

道德 - 使用正确的连接池。它会帮你省去很多悲伤。