Исключение 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 довольно проста:
- Получить соединение.
- Создать заявление.
Выполните инструкцию и получите ResultSet.
Обработать ResultSet.
Закройте все: 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;
}