Насколько я понимаю, каждый раз, когда PreparedStatement
инициализируется, оператор кэшируется в памяти, выделенной для соединения с базой данных.Следовательно, если инициализировать избыточные переменные PreparedStatement
, существует риск переполнения памяти, доступной для соединения.
Освобождается ли кэшированная память путем вызова close()
в PreparedStatement
экземплярах?
Выполнение двух PreparedStatement
, содержащих идентичный SQL, создаетповторяющиеся события кэширования, или база данных достаточно умна, чтобы не кэшировать новый экземпляр дубликата PreparedStatement
?
Пример 1, будет ли переполнение памяти соединения?:
while (true) {
PreparedStatement ps = connection.prepareStatement("SELECT id + ? FROM tbl");
ps.setDouble(1, Math.random());
ps.executeQuery();
ps.close();
}
Если так, то как насчет этого?:
while (true) {
PreparedStatement ps = connection.prepareStatement("SELECT id FROM tbl");
ps.executeQuery();
ps.close();
}