Разлика между JDBC Statement и PreparedStatement

Преди да преминем към разликата, нека първо да разберем какво е JDBC.

JDBC (Java Database Connectivity) е Java API за свързване и изпълнение на заявки с базата данни. Това е индустриалният стандарт за независима от базата данни свързаност, който осигурява универсален достъп до данни, особено данните, съхранявани в релационни бази данни. Той използва JDBC драйвери, написани на езика за програмиране на Java, за да свърже всяко Java приложение с базата данни. Тя ни позволява да се свързваме с всички корпоративни бази данни дори в хетерогенна среда.

Statement и PreparedStatement са класове, които представляват SQL изрази за взаимодействие със сървъра на базата данни. Нека ги обсъдим подробно и да обясним разликата между двете.

Какво е Декларация?

Statement е JDBC интерфейс, използван за общ достъп до базата данни на SQL, особено при използване на статични SQL изрази по време на изпълнение.

Той определя методи и свойства за взаимодействие с базата данни, използвайки SQL или PL/SQL команди. Използва се за изпълнение на стандартни SQL изрази като CREATE, UPDATE, RETREIVE и DELET (CRUD). Той работи като носител между Java програма и базата данни, но не може да приема параметри по време на изпълнение и не е предварително компилиран, което означава, че същият SQL израз не може да се използва многократно, което отчита бавна производителност от PreparedStatement. Той е по -предразположен към SQL Injection.

Какво е PreparedStatement?

Това е разширена и мощна версия на интерфейса на Statement, която може или не може да бъде параметризирана, което означава, за разлика от Statement, че може да приема входни параметри, които отчитат по -бърза производителност.

Също така помага при писането на обектно -ориентиран код с методи за задаване, които подобряват производителността на приложенията. И най-хубавото е, че се изпълнява чрез не-SQL двоичен комуникационен протокол, който по същество е нетекстово базиран формат, използван за комуникация между клиенти и сървъри, което в крайна сметка намалява използването на честотната лента, като по този начин насърчава по-бързи комуникационни разговори към сървъра.

С прости думи, това е обект, който представлява предварително компилиран SQL израз.

Разлика между JDBC Statement и PreparedStatement

Основен

JDBC Statement и PreparedStatement са класове, които представляват SQL изрази за изпращане на SQL или PL/SQL команди и получаване на данни от базата данни. Интерфейсът Statement предоставя методи и свойства за изпълнение на заявки и промени с базата данни. Това е интерфейс, използван за общ достъп до базата данни, но не може да приема IN и OUT параметри. Интерфейсът PreparedStatement, от друга страна, разширява интерфейса на Statement и се използва за изпълнение на предварително компилиран SQL израз в JDBC, така че един и същ SQL израз може да се използва многократно.

Предварително съставена декларация

За разлика от JDBC Statement, PreparedStatement е предварително компилиран израз, което означава, че когато се изпълнява, СУБД може да изпълнява SQL израза, без да е необходимо първо да го компилира. С прости думи, изявленията могат да се изпълняват няколко пъти, без да се налага да ги компилирате всеки път. Всичко, което прави, е да разшири интерфейса на Statement и да добави възможност за използване на променливи за свързване. Това позволява по -бързо изпълнение, особено когато се използва с партиди. Декларацията, от друга страна, не е предварително компилирана, което я прави по -малко надеждна от PreparedStatement.

Входни параметри

Интерфейсът на Statement не може да предава параметри на SQL заявки по време на изпълнение, тъй като може да се използва само за изпълнение на статични SQL изрази и не може да приема входни параметри. Входният параметър е заместител в SQL израз, използван за обмен на данни между съхранени процедури и функции. Интерфейсът на PreparedStatement, напротив, може да предава параметри на SQL заявки по време на изпълнение и може да има един или повече IN параметри, което в крайна сметка ни позволява да изпълняваме динамични заявки.

Двоичен комуникационен протокол

PreparedStatement се изпълнява чрез двоичен комуникационен протокол, различен от SQL, което означава, че се използва нетекстово базиран формат за комуникация между клиенти и сървъри вместо по-малко ефективния текстов протокол. В двоични протоколи данните се изпращат в двоична форма, която се анализира много по -бързо и е най -бързият и най -ефективният начин за свързване на клиент към сървър. Това води до по -малко използване на честотната лента и по -бързи комуникационни разговори със сървъра, което в крайна сметка ускорява нещата с повтарящи се заявки за избор. Не се прилага такъв протокол в интерфейса на изявлението.

SQL инжектиране

Позовава се на инжекционна атака, която може да унищожи базата данни. Това е една от най -често срещаните техники за инжектиране на злонамерен код в SQL изрази, за да манипулира базата данни, за да разкрие съдържанието на нападателя. Зловреден код се инжектира в приложение и след това се предава в SQL базата данни, за да получи достъп до различните ресурси или да направи промени в данните. PreparedStatement е устойчив срещу SQL инжектиране, тъй като използва параметризирани заявки за автоматично избягване на специални символи, като кавички. Изявлението не може да избяга от SQL инжектирането, тъй като използваме конкатенирани SQL низове в JDBC.

Изявление срещу подготвено изявление: Сравнителна диаграма

Резюме на JDBC   Декларация срещу PreparedStatement

Интерфейсите на JDBC Statement и PreparedStatement определят методи и свойства за изпращане и получаване на данни от SQL базата данни. Докато едно основно изявление е достатъчно за изпълнение на прости SQL изрази, трудно е да се победи гъвкавостта и ползите, предоставяни от PreparedStatement. Докато интерфейсът Statement е носител с общо предназначение, използван за изпълнение на статични SQL изрази, PreparedStatement е параметризиран оператор, използван за изпълнение на динамични SQL изрази. Основната разлика между двете е, че PreparedStatement е предварително компилиран израз, което означава, че същата SQL команда може да се използва многократно, което отчита по-добра производителност и по-бързи резултати.

1 коментар

  1. Благодаря, много е полезно.

Вижте повече за: ,