Исключение SQL возникает при попытке закрыть соединение в предложении finally

У меня есть некоторый код OAF внутри, что я инициирую соединение SQL, но когда я пытаюсь закрыть его, он вызывает исключение SQL. вот код

    try
    {
        conn = 
        (OracleConnection)oadbtransactionimpl.getJdbcConnection();
        String queryForEmpty = 
            "select ... query here"; 
        projectDetailsStatment = 
                conn.prepareStatement(queryForEmpty);
        projectDetailsStatment.setString(1,sprojectid);
        ResultSet rs = projectDetailsStatment.executeQuery();

    }
    catch(SQLException e)
   {
       String sqlErrMsg = e.getMessage();
       throw new OAException((new StringBuilder()).append("handle exception here:").append(sqlErrMsg).toString(), (byte)0);
   }
   finally
   {
      conn.close(); // throws exception here
   }

2 ответа

Решение

Попробуйте заключить закрывающий код с предложением try и catch

    try
    {
        conn = 
        (OracleConnection)oadbtransactionimpl.getJdbcConnection();
        String queryForEmpty = 
            "select ... query here"; 
        projectDetailsStatment = 
                conn.prepareStatement(queryForEmpty);
        projectDetailsStatment.setString(1,sprojectid);
        ResultSet rs = projectDetailsStatment.executeQuery();

    }
    catch(SQLException e)
   {
       String sqlErrMsg = e.getMessage();
       throw new OAException((new StringBuilder()).append("Exception in Finding Project Type:").append(sqlErrMsg).toString(), (byte)0);
   }
   finally
   {
      try{
      conn.close(); // throws exception here
      }
        catch(SQLException e)
      {
        //your code here
      }
   }

Базовая схема любой операции JDBC довольно проста:

  1. Получить соединение.
  2. Создать заявление.
  3. Выполните инструкцию и получите ResultSet.

  4. Обработать ResultSet.

  5. Закройте все: ResultSet, Statement и Connection.

ПЛОХОЕ РЕШЕНИЕ

public void handleJDBC()  {
    try {
        DataSource dataSource = getDataSource();
        Connection connection = dataSource.getConnection();
        operation(connection)
        connection.close();
    } catch (SQLException e) {
        //do something here
    }
}

ХОРОШАЯ ПРАКТИКА

finally {
        if (connection != null) {
            try {
            connection.close();
        } catch (SQLException e) {
            if (exception != null) {
                exception = new DoubleException(exception, e);
            } else {
                exception = e;
            }
        }
        }
    }
    if (exception != null) {
        throw exception;
    }
Другие вопросы по тегам