Предположим, у нас есть класс, который записывает в базу данных сообщение журнала. Этот класс вызывается из разных частей кода и выполняет снова и снова тот же оператор INSERT. Кажется, что он призывает использовать PreparedStatement.Правильное использование PreparedStatement
Однако мне интересно, что это за правильное использование. Я все еще получаю выгоду от его использования, например, СУБД, используя один и тот же путь выполнения каждый раз, когда он выполняется, даже если я создаю новый PreparedStatement каждый раз при вызове метода или должен ли я иметь PreparedStatement как член класса и никогда не закрывать это для того, чтобы использовать его и получать от этого выгоду?
Теперь, если единственный способ получить выгоду с помощью PreparedStatement в этом случае состоит в том, чтобы сохранить его открытым как член класса, может ли одно и то же соединение одновременно открывать разные подготовленные (с разными запросами) PreparedStatement? Что происходит, когда два из этих PreparedStatements выполняются одновременно? Проверяет ли драйвер JDBC выполнение PreparedStatements?
Заранее спасибо, Dani.
Это зависит от используемой СУБД. Некоторые из них (автоматически) кэшируют планы выполнения на сервере, а некоторые нет. Некоторые кешируют планы в драйвере, некоторые не делают –
В дополнение к предыдущему комментарию, промежуточное программное обеспечение также может кэшировать операторы (например, серверы приложений). –
Соединения JDBC, как правило, не являются потокобезопасными, поэтому вы не должны одновременно запускать два PreparedStatements (из разных потоков) в одном и том же соединении. Если вы попробуете, вы получите странные ошибки. – Jesper