Использование оператора Java Create в цикле while - PullRequest
2 голосов
/ 25 февраля 2012

Что из следующего является правильным (или имеет значение)

Ответы [ 5 ]

2 голосов
/ 25 февраля 2012

Я не думаю, что есть большая разница в вышеупомянутом случае - вы хотели бы закрыть утверждение, если между ними достаточно работы, чтобы оно оставалось открытым в течение длительного времени - согласно документам:

Освобождает базу данных объекта Statement и ресурсы JDBC немедленно, вместо того, чтобы ожидать, когда это произойдет, когда оно автоматически закрывается.Обычно рекомендуется освобождать ресурсы, как только вы закончите с ними, чтобы не связывать ресурсы базы данных.

Если ваш SQL-код не изменится, лучше всего использовать PreparedStatement , используя первый указанный вами способ.

2 голосов
/ 25 февраля 2012

Действительно, вы должны использовать PreparedStatement с заполнителями и создавать оператор только один раз, как в первом примере.

2 голосов
/ 25 февраля 2012

Создание оператора вне цикла является более чистым и может быть несколько быстрее, хотя вам необходимо выполнить профилирование, чтобы увидеть, имеет ли это большое значение в вашем случае.

Если цикл выполняетТо же самое с разными значениями данных, я бы предпочел PreparedStatement для скорости.

2 голосов
/ 25 февраля 2012

Если в обновлении внутри цикла используется точно такой же оператор, тогда предпочтительнее первая форма.Напротив, если оператор меняется с каждой итерацией, то вы застряли во второй форме.

1 голос
/ 25 февраля 2012

Ни один из них не является правильным. Предполагая, что вы неоднократно выполняете один и тот же запрос, но у них разные значения, вам следует использовать (один) PreparedStatement с запросом, который имеет заполнители, и предоставлять разные значения на каждой итерации цикла.

Использование подготовленного оператора будет более эффективным на стороне Java (за счет сокращения создания объектов и затрат на сборку мусора). Это также может снизить нагрузку на базу данных в зависимости от того, как работают драйверы JDBC.

Другой момент заключается в том, что вам необходимо закрыть PreparedStatement и Connection в предложении finally для try. Если вы этого не сделаете, и будет выдано исключение, то ваш код будет пропускать соединение с базой данных. Это может вызвать проблемы позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...