我的程序中出現MaxOpenPreparedStatement異常。我可以使用getNumActive()/ getNumIdle()函數監視GenericObjectPool中的對象數量。我如何從org.apache.commons.dbcp.BasicDataSource對象獲得連接&準備語句池? 謝謝dbcp:打開準備好的語句的編號
1
A
回答
0
DBCP的BasicDataSource公開數據源配置的maxOpenPreparedStatements值。
這個例外的存在似乎表明您正在打開太多的語句和卻沒有關閉它們:
由於連接通常只使用一個或兩個語句的時間,這主要是用來幫助檢測資源泄漏。
2
我不知道有關的實際問題的答案,但打開的PreparedStatement的最大允許量通常是相當高的。所以,我強烈懷疑,導致你問這個問題的技術問題是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) {}
}
0
您也許能夠通過繼承BasicDataSource,然後覆蓋createPoolableConnectionFactory並用您自己創建的語句池工廠(因此可以跟蹤)替換語句工廠,獲得DBCP內部部件。
與此處的其他答案一樣,這似乎表示準備好的語句保持打開狀態 - 即使您已將預備語句池關閉(或者完全停止使用連接池),也會出現同樣的問題),這可能會使原始問題更容易調試。
相關問題
- 1. 準備好語句,同時提取準備好的語句
- 2. 準備好的MySQLi語句
- 3. org.hibernate.session準備好的語句
- 4. MySQL準備好的語句
- 5. MySQLi準備好的語句?
- 6. 準備好的語句無效的參數編號
- 7. PHP在準備好的語句中準備了語句
- 8. 準備好的語句語法錯誤
- 9. MySQL準備好的語句語法
- 10. JDBC準備好的語句/參考準備在另一個準備好的語句
- 11. 已準備好的語句的函數
- 12. 已準備好的語句中的SQLITE_MISUSE
- 13. 準備好的語句嵌套在另一個準備的語句
- 14. MySQLi /準備好的語句和SQL_CALC_FOUND_ROWS
- 15. 準備好的語句錯誤
- 16. 準備好的語句幫助
- 17. 創建雄辯準備好的語句
- 18. 獲取從MySQL準備好的語句
- 19. 運行準備好的語句(MySQL/PHP)
- 20. mysqli準備好的語句是什麼?
- 21. mysqli_real_escape_string AND準備好的語句?
- 22. 如何使用準備好的語句
- 23. 準備好的語句和錯誤lastInsertId
- 24. 準備好的語句更新問題
- 25. PHP和MySQL準備好的語句
- 26. MySQLi準備好的語句和事務
- 27. 瞭解PHP準備好的語句
- 28. PHP/mySQL準備好的語句
- 29. PHP準備好的語句與數組
- 30. 導軌 - 準備好的語句
這是一個配置值,而不是當前statictics – dbf 2010-07-01 14:00:35