Oracle
 sql >> база данни >  >> RDS >> Oracle

Затваряне на ResultSet, но не и затваряне на PreparedStatement

Течът ще бъде най-големият проблем с отворен курсор.

ORA-01000: maximum open cursors exceeded

Ако максималния брой отворени курсори бъде надвишен, базата данни ще стане неизползваема, с изключение на курсорите, които вече са задържани. Но в повечето случаи, когато това се случи, задържаните курсори дори не се използват (какъвто би бил случаят във вашия въпрос).

От java 7 насам най-добрият начин да се справите с това е да използвате опитайте с ресурси . И двете ResultSet и PreparedStatement внедрява AutoCloseable интерфейс, което означава, че ще бъдат затворени, когато вече не са необходими.

Ако нямате java 7, тогава трябва да се справите с това в finally блокирайте, но се уверете, че сте проверили за нулеви стойности, преди да затворите, в противен случай може да срещнете NPE, ако ressource никога не е бил инициализиран.

Обърнете внимание, че обратното няма да създаде проблем, тъй като затварянето на израз автоматично ще затвори неговия набор от резултати.

Обърнете внимание, че можете лесно да разрешите повече курсори към вашето приложение за по-малък шанс за превишаване на максимума.

ALTER SYSTEM SET open_cursors = 400 SCOPE=BOTH;

Но през повечето време, ако срещнете максимално отворени курсори, това не би трябвало да е решение, тъй като само ще скрие истинския проблем.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Сравнение на Oracle UCP, C3P0 и HikariCP

  2. Oracle 11g Bind променлива не съществува

  3. Oracle:YEAR Ключовата дума е невалидна

  4. Плюсове и минуси на използването на пакети в Oracle

  5. Oracle текст за търсене на изгледи