dbcp: количество открытого подготовленного оператора

Я получаю исключение MaxOpenPreparedStatement в своей программе. Я могу контролировать количество объектов в GenericObjectPool с getNumActive ()/getNumIdle () функции. Как я могу делать пересадку и подготовленные пулы оператора от org.apache.commons.dbcp. Объект BasicDataSource?Спасибо

1
задан skaffman 17 January 2011 в 10:20
поделиться

2 ответа

Я не уверен в ответе на актуальный вопрос, но максимально допустимое количество открытых подготовленных заявлений обычно довольно велико. Поэтому я сильно подозреваю, что техническая проблема, из-за которой вы задаете этот вопрос, заключается в том, что код JDBC неправильно закрывает все открытые операторы в блоке finally в соответствии со следующей идиомой JDBC:

Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
// ...

try {
    connection = database.getConnection();
    preparedStatement = connection.prepareStatement(SQL_STRING);
    resultSet = preparedStatement.executeQuery();
    // ...
} finally {
    if (resultSet != null) try { resultSet.close(); } catch (SQLException ignore) {}
    if (preparedStatement != null) try { preparedStatement.close(); } catch (SQLException ignore) {}
    if (connection != null) try { connection.close(); } catch (SQLException ignore) {}
}
2
ответ дан 2 September 2019 в 23:22
поделиться

DBCP's BasicDataSource предоставляет значение maxOpenPreparedStatements , с которым сконфигурирован источник данных.

Присутствие этого исключения, кажется, указывает на то, что вы открываете слишком много операторов, но не закрываете их, однако:

Поскольку соединение обычно использует только один или два оператора за раз, это в основном используется для помощи в обнаружении утечек ресурсов .

0
ответ дан 2 September 2019 в 23:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: