Razlika med izjavo JDBC in pripravljeno izjavo

Preden skočimo na razliko, najprej razumemo, kaj je JDBC.

JDBC (Java Database Connectivity) je Java API za povezovanje in izvajanje poizvedb z bazo podatkov. To je industrijski standard za povezljivost, neodvisno od baze podatkov, ki zagotavlja univerzalni dostop do podatkov, zlasti do podatkov, shranjenih v relacijskih bazah podatkov. Za povezovanje katere koli aplikacije Java z bazo podatkov uporablja gonilnike JDBC, napisane v programskem jeziku Java. Omogoča nam povezovanje z vsemi korporativnimi bazami podatkov tudi v heterogenem okolju.

Stavek in PreparedStatement sta razreda, ki predstavljata stavke SQL za interakcijo s strežnikom baz podatkov. Podrobno se pogovorimo o njih in razložimo razliko med njima.

Kaj je izjava?

Statement je vmesnik JDBC, ki se uporablja za splošni dostop do baze podatkov SQL, zlasti med uporabo statičnih stavkov SQL v času izvajanja.

Določa metode in lastnosti za interakcijo z bazo podatkov z ukazi SQL ali PL/SQL. Uporablja se za izvajanje standardnih stavkov SQL, kot so CREATE, UPDATE, RETREIVE in DELET (CRUD). Deluje kot nosilec med programom Java in zbirko podatkov, vendar med izvajanjem ne more sprejeti parametrov in ni vnaprej sestavljen, kar pomeni, da istega stavka SQL ni mogoče večkrat uporabiti, kar predstavlja počasno delovanje kot PreparedStatement. Bolj je nagnjen k SQL Injection.

Kaj je PreparedStatement?

To je razširjena in zmogljiva različica vmesnika Statement, ki je lahko parametrizirana ali pa tudi ne, kar pomeni, da za razliko od Stateme lahko sprejme vhodne parametre, ki predstavljajo hitrejše delovanje.

Pomaga tudi pri pisanju objektno usmerjene kode z nastavitvenimi metodami, ki izboljšujejo delovanje aplikacij. Najboljši del pa je, da se izvede prek binarnega komunikacijskega protokola, ki ni SQL, ki je v bistvu netekstualna oblika, ki se uporablja za komunikacijo med odjemalci in strežniki, kar na koncu zmanjša uporabo pasovne širine in s tem spodbuja hitrejše komunikacijske klice s strežnikom.

Preprosto povedano, gre za objekt, ki predstavlja vnaprej sestavljen stavek SQL.

Razlika med izjavo JDBC in pripravljeno izjavo

Osnovno

Stavek JDBC in PreparedStatement sta razreda, ki predstavljata stavke SQL za pošiljanje ukazov SQL ali PL/SQL in sprejemanje podatkov iz baze podatkov. Vmesnik Statement ponuja metode in lastnosti za izvajanje poizvedb in sprememb v bazi podatkov. To je vmesnik za splošni dostop do baze podatkov, vendar ne more sprejeti parametrov IN in OUT. Po drugi strani pa vmesnik PreparedStatement razširi vmesnik Statement in se uporablja za izvajanje vnaprej sestavljenega stavka SQL v JDBC, tako da je mogoče isti stavek SQL uporabiti večkrat.

Vnaprej sestavljena izjava

Za razliko od stavka JDBC je PreparedStatement vnaprej sestavljen stavek, kar pomeni, da lahko DBMS ob izvajanju izvede stavek SQL, ne da bi ga bilo treba najprej prevesti. Preprosto povedano, lahko se izjave izvajajo večkrat, ne da bi jih morali vsakič sestavljati. Vse, kar naredi, je razširiti vmesnik Statement in dodati možnost uporabe spremenljivk vezave. To omogoča hitrejšo izvedbo, še posebej, če se uporablja s serijami. Izjava pa ni vnaprej sestavljena, zaradi česar je manj zanesljiva kot PreparedStatement.

Vhodni parametri

Vmesnik Statement med izvajanjem ne more posredovati parametrov poizvedbam SQL, saj se lahko uporablja samo za izvajanje statičnih stavkov SQL in ne more sprejeti vhodnih parametrov. Vhodni parameter je namestnik v stavku SQL, ki se uporablja za izmenjavo podatkov med shranjenimi postopki in funkcijami. Nasprotno, vmesnik PreparedStatement lahko med izvajanjem posreduje parametre poizvedbam SQL in ima lahko enega ali več parametrov IN, ki nam na koncu omogočajo izvajanje dinamičnih poizvedb.

Binarni komunikacijski protokol

PreparedStatement se izvede prek binarnega komunikacijskega protokola, ki ni SQL, kar pomeni, da se za komunikacijo med odjemalci in strežniki uporablja netekstualni format namesto manj učinkovitega besedilnega protokola. V binarnih protokolih se podatki pošiljajo v binarni obliki, ki je veliko hitrejša za razčlenjevanje in je najhitrejši in najučinkovitejši način za povezovanje odjemalca s strežnikom. Posledica tega je manjša uporaba pasovne širine in hitrejši komunikacijski klici na strežnik, ki sčasoma pospešijo stvari s ponavljajočimi se poizvedbami. V vmesniku Statement ni tak protokol.

Injekcija SQL

Nanaša se na injekcijski napad, ki bi lahko uničil bazo podatkov. To je ena najpogostejših tehnik vbrizgavanja zlonamerne kode v stavke SQL za manipulacijo zbirke podatkov, da razkrije vsebino napadalcu. Zlonamerna koda se vbrizga v aplikacijo in nato posreduje v bazo podatkov SQL, da pridobi dostop do različnih virov ali spremeni podatke. PreparedStatement je odporen proti vbrizgavanju SQL, ker uporablja parametrizirane poizvedbe za samodejno izogibanje posebnim znakom, kot so narekovaji. Stavek ne more uiti vbrizgavanju SQL, saj v JDBC uporabljamo združene nize SQL.

Izjava proti pripravljeni izjavi: Primerjalna tabela

Povzetek JDBC   Izjava proti pripravljeni izjavi

Vmesnika Statement JDBC in PreparedStatement določata metode in lastnosti za pošiljanje in sprejemanje podatkov iz zbirke podatkov SQL. Čeprav za izvajanje preprostih stavkov SQL zadostuje že osnovni stavek, je težko premagati prilagodljivost in koristi, ki jih ponuja PreparedStatement. Medtem ko je vmesnik Statement nosilec splošnega namena, ki se uporablja za izvajanje statičnih stavkov SQL, je PreparedStatement parametriziran stavek, ki se uporablja za izvajanje dinamičnih stavkov SQL. Glavna razlika med tema dvema je, da je PreparedStatement vnaprej sestavljen stavek, kar pomeni, da se isti ukaz SQL lahko uporabi večkrat, kar pomeni boljše delovanje in hitrejše rezultate.

1 Komentar

  1. Hvala, zelo je v pomoč.

Poglej več o: ,