Før vi hopper til forskjellen, la oss forstå hva JDBC er først.
JDBC (Java Database Connectivity) er en Java API for å koble og utføre spørringer med databasen. Det er bransjestandarden for database-uavhengig tilkobling som gir universell datatilgang, spesielt dataene som er lagret i relasjonsdatabaser. Den bruker JDBC-drivere skrevet i Java-programmeringsspråk for å koble til et Java-program med databasen. Det tillater oss å koble til alle bedriftsdatabaser selv i et heterogent miljø.
Statement and PreparedStatement er klasser som representerer SQL-setninger for å samhandle med databaseserveren. La oss diskutere dem i detalj og forklare forskjellen mellom de to.
Erklæring er et JDBC-grensesnitt som brukes til allmenn tilgang til SQL-databasen, spesielt når du bruker statiske SQL-setninger i løpet av tiden..
Den definerer metoder og egenskaper for å kommunisere med databasen ved hjelp av SQL- eller PL / SQL-kommandoer. Det brukes til å utføre standard SQL-setninger som CREATE, UPDATE, RETREIVE og DELET (CRUD). Det fungerer som en operatør mellom et Java-program og databasen, men det kan ikke akseptere parametere ved kjøretid, og det er ikke forhåndskompilert, noe som betyr at den samme SQL-setningen ikke kan brukes flere ganger som står for langsom ytelse enn PreparedStatement. Det er mer utsatt for SQL Injection.
Det er en utvidet og den kraftige versjonen av Statement-grensesnittet som kanskje eller ikke kan parameteriseres, noe som betyr ulikt Statement, kan det ta innspillparametere som gir raskere ytelse.
Det hjelper også å skrive Objektorientert kode med setter metoder som forbedrer ytelsen til applikasjonene. Og den beste delen, blir den utført via en ikke-SQL binær kommunikasjonsprotokoll som i utgangspunktet er et ikke-tekstbasert format som brukes til å kommunisere mellom klienter og servere som i siste instans reduserer bruken av båndbredde og dermed fremmer raskere kommunikasjonssamtaler til serveren.
Enkelt sagt er det et objekt som representerer en forhåndskompilert SQL-setning.
JDBC Statement and PreparedStatement er klasser som representerer SQL-setninger for å sende SQL- eller PL / SQL-kommandoer og motta data fra databasen. Statement-grensesnittet gir metoder og egenskaper for å utføre spørringer og endringer med databasen. Det er et grensesnitt som brukes til allmenn tilgang til databasen, men den kan ikke akseptere IN og OUT parametere. Grensesnittet PreparedStatement, derimot, utvider Statement-grensesnittet og brukes til å utføre en forhåndskompilert SQL-setning i JDBC slik at den samme SQL-setningen kan brukes flere ganger.
I motsetning til en JDBC-erklæring er PreparedStatement en forkompilert setning som betyr at når den utføres, kan DBMS kjøre SQL-setningen uten å måtte kompilere den først. Enkelt sagt kan uttalelsene kjøres flere ganger uten å måtte kompilere det hver gang. Alt det gjør er å forlenge Statement-grensesnittet og legge til muligheten til å bruke bindingsvariabler. Dette muliggjør raskere utførelse, spesielt når den brukes med batcher. Erklæringen er derimot ikke forkompilert, noe som gjør den mindre pålitelig enn PreparedStatement.
Et Statement-grensesnitt kan ikke sende parametere til SQL-spørringer ved kjøretid, da det bare kan brukes til å utføre statiske SQL-setninger, og det kan ikke akseptere innspillingsparametere. En inngangsparameter er en plassholder i en SQL-setning som brukes til å utveksle data mellom lagrede prosedyrer og funksjoner. PreparedStatement-grensesnitt, tvert imot, kan sende parametere til SQL-spørringer ved kjøretid, og det kan ha en eller flere IN-parametere som til slutt lar oss utføre dynamiske spørringer.
PreparedStatement utføres via en ikke-SQL binær kommunikasjonsprotokoll, noe som betyr at et ikke-tekstbasert format brukes til å kommunisere mellom klienter og servere i stedet for den mindre effektive tekstprotokollen. I binære protokoller sendes dataene i binær form, som er mye raskere å analysere og er den raskeste og mest effektive måten å grensesnittere en klient til en server. Dette resulterer i mindre båndbreddebruk og raskere kommunikasjonsanrop til server som til slutt gir raskere oppgaver med gjentatte utvalgsspørsmål. Ingen slik protokoll er implementert i Statement-grensesnittet.
Det refererer til et injeksjonsangrep som kan ødelegge databasen. Det er en av de vanligste teknikkene for å injisere skadelig kode i SQL-setninger for å manipulere databasen til å avsløre innholdet til angriperen. En skadelig kode injiseres i et program og sendes deretter til SQL-databasen for å få tilgang til de ulike ressursene eller gjøre endringer i dataene. PreparedStatement er motstandsdyktig mot SQL-injeksjon fordi den bruker parameteriserte spørringer for å automatisk unnslippe spesialtegn som anførselstegn. Erklæring kan ikke unnslippe SQL-injeksjon, da vi bruker sammenkoblede SQL-strenger i JDBC.
JDBC Statement and PreparedStatement-grensesnittene definerer metoder og egenskaper for å sende og motta data fra SQL-databasen. Mens en grunnleggende erklæring er nok til å utføre enkle SQL-setninger, er det vanskelig å slå fleksibiliteten og fordelene ved å bruke PreparedStatement. Selv om Statement-grensesnittet er en universalformatbærer som brukes til å utføre statiske SQL-setninger, er PreparedStatement en parameterisert setning som brukes til å utføre dynamiske SQL-setninger. Hovedforskjellen mellom de to er at PreparedStatement er en pre-compiled statement som betyr at den samme SQL-kommandoen kan brukes flere ganger som gir bedre ytelse og raskere resultater.