Mielőtt áttérnénk a különbségre, megértjük, mi az első a JDBC.
A JDBC (Java Database Connectivity) egy Java API, amely a lekérdezésekhez az adatbázishoz kapcsolódik és végrehajtható. Az adatbázis-független kapcsolatok ipari szabványa, amely egyetemes adathozzáférést biztosít, különösen a Relációs adatbázisokban tárolt adatokhoz. A Java programozási nyelven írt JDBC illesztőprogramokat használva bármilyen Java alkalmazás összekapcsolásához az adatbázisban. Ez lehetővé teszi számunkra, hogy minden vállalati adatbázishoz kapcsolódjunk, még heterogén környezetben is.
A Statement és az PreparedStatement olyan osztályok, amelyek képviselik az SQL utasításokat az adatbázis-kiszolgálóval való interakcióhoz. Részletesen tárgyaljuk őket és magyarázzuk el a kettő közötti különbséget.
Nyilatkozat egy JDBC felület, amelyet az SQL adatbázis általános célú elérésére használnak, különösen statikus SQL utasítások futásidejű használatakor.
Meghatározza az adatbáziskal való együttműködés módszereit és tulajdonságait SQL vagy PL / SQL parancsok segítségével. Általános SQL utasítások, például CREATE, UPDATE, RETREIVE és DELET (CRUD) végrehajtására szolgál. Hordozóként működik a Java program és az adatbázis között, de futási időben nem tud paramétereket elfogadni, és nem előre összeállítva, tehát ugyanaz az SQL utasítás nem használható többször is, ami lassú teljesítményt eredményez, mint az PreparedStatement. Ez inkább hajlamos az SQL befecskendezésre.
Ez a nyilatkozat interfész kibővített és erőteljes változata, amely paraméterezhető vagy nem, tehát eltérően a nyilatkozattól, bemeneti paramétereket vehet fel, amelyek a gyorsabb teljesítményért felelősek.
Elősegíti az objektumorientált kód írását olyan beállító módszerekkel is, amelyek javítják az alkalmazások teljesítményét. És a legjobb az, hogy nem SQL bináris kommunikációs protokollon keresztül hajtják végre, amely alapvetően nem szöveges alapú formátum, amelyet az ügyfelek és a kiszolgálók közötti kommunikációhoz használnak, ami végső soron csökkenti a sávszélességet, ezáltal elősegítve a gyorsabb kommunikációt a szerver felé..
Egyszerűen fogalmazva, egy objektum képviseli az előre összeállított SQL utasítást.
A JDBC Statement és az PreparedStatement olyan osztályok, amelyek az SQL utasításokat reprezentálják SQL vagy PL / SQL parancsok küldésére és adatok fogadására az adatbázisból. A Statement felület módszereket és tulajdonságokat biztosít a lekérdezések és változások végrehajtásához az adatbázisban. Ez egy felület, amelyet az adatbázis általános célú eléréséhez használnak, de nem képes az IN és a OUT paramétereket elfogadni. Az PreparedStatement felület ezzel szemben kiterjeszti a nyilatkozat felületét, és egy előre elkészített SQL utasítás végrehajtására szolgál a JDBC-ben, így ugyanaz az SQL utasítás többször használható..
A JDBC nyilatkozatától eltérően az PreparedStatement egy előre összeállított utasítás, amely azt jelenti, hogy amikor végrehajtásra kerül, a DBMS az SQL utasítást futtathatja anélkül, hogy először le kellene állítania. Egyszerűen fogalmazva, az állítások többször futtathatók anélkül, hogy minden egyes alkalommal össze kellene állítaniuk. Csak annyit tesz, hogy kibővíti a nyilatkozat felületét, és hozzáadja a kötőváltozók használatának képességét. Ez lehetővé teszi a gyorsabb végrehajtást, különösen, ha tételekkel használják. Az állítás viszont nincs előre összeállítva, ami kevésbé megbízhatóvá teszi, mint az PreparedStatement.
A nyilatkozat felülete nem továbbíthat paramétereket az SQL lekérdezésekhez futási időben, mivel csak statikus SQL utasítások végrehajtására használható, és nem fogadja el a bemeneti paramétereket. A bemeneti paraméter az SQL utasítás helyőrzője, amelyet az adatok cseréjére használnak a tárolt eljárások és funkciók között. Az PreparedStatement interfész éppen ellenkezőleg, továbbíthat paramétereket az SQL lekérdezésekhez futási időben, és lehet egy vagy több IN paraméterrel, amely végső soron lehetővé teszi a dinamikus lekérdezések végrehajtását..
Az PreparedStatement nem SQL bináris kommunikációs protokollon keresztül történik, azaz a nem szöveges alapú formátumot használják az ügyfelek és a kiszolgálók közötti kommunikációhoz a kevésbé hatékony szöveges protokoll helyett. A bináris protokollokban az adatokat bináris formában küldik el, amely sokkal gyorsabban elemezhető, és amely a leggyorsabb és leghatékonyabb módja az ügyfél és a kiszolgáló közötti illesztésnek. Ez kevesebb sávszélességet és gyorsabb kommunikációt eredményez a kiszolgáló felé, amely végül ismétlődő kiválasztási lekérdezésekkel felgyorsítja a dolgokat. A nyilatkozat felületén nincs ilyen protokoll.
Olyan injekciós támadásra utal, amely tönkreteheti az adatbázist. Ez az egyik leggyakoribb módszer a rosszindulatú kódok befecskendezéséhez az SQL utasításokba az adatbázis manipulálása céljából, hogy tartalmat derítsenek ki a támadó számára. Egy rosszindulatú kódot injektálnak egy alkalmazásba, majd továbbítják az SQL adatbázishoz, hogy hozzáférjenek a különféle erőforrásokhoz, vagy módosítsák az adatokat. Az PreparedStatement rugalmas az SQL befecskendezés ellen, mivel paraméterezett lekérdezéseket használ a speciális karakterek, például idézetek automatikus automatikus elkerülésére. Az utasítás nem kerülheti el az SQL-befecskendezést, mivel összekapcsolt SQL-karakterláncokat használunk a JDBC-ben.
A JDBC Statement és az PreparedStatement interfészek meghatározzák az SQL adatbázisból történő adatok küldésének és fogadásának módszereit és tulajdonságait. Noha az alapvető nyilatkozat elegendő az egyszerű SQL utasítások végrehajtásához, nehéz megbirkózni az PreparedStatement használatának rugalmasságával és előnyeivel. Míg a Statement interfész statikus SQL utasítások végrehajtására szolgáló általános célú hordozó, az PreparedStatement egy paraméteres utasítás, amely dinamikus SQL utasítások végrehajtására szolgál. A kettő közötti fő különbség az, hogy az PreparedStatement egy előre összeállított nyilatkozat, azaz ugyanaz az SQL parancs többször is használható, ami jobb teljesítményt és gyorsabb eredményeket eredményez.