Citat:
_owl_: Konkatenacija stringova ti je sigurno potpuno nepoznat pojam. Na svu srecu bas sam raspolozen da dam dodatno objasnjenje.
Ti si neki vidovit dečko i znaš šta je kome poznato, a šta nije? Takve ispade zadrži za svoj parapsihološki forum a ovde se drži Jave.
Nego, da se vratimo na temu.
Ako imaš potrebu da izvršavaš isti upit više puta ali sa različitim parametrima onda koristiš PreparedStatement. Razlika je u načinu na koji će sama baza da tretira tvoj upit.
Code:
PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES SET SALARY = ? WHERE ID = ?");
Svaki put kada pozoveš ovaj upit, bez obzira što daješ različite parametre (recimo prvi put proslediš parametre 0 i 32, a drugi put 1000 i 21), baza će znati da se radi o istom upitu i iskoritiće svoj keš upita i brže će ga izvršiti.
Ukoliko svaki put kreiraš statement i direktno u SQL ubacuješ parametre onda će baza te upite videti kao različite i moraće svaki put da radi prekompajliranje upita i neće moći da iskoristi interni keš. Upite iz prethodnog primera baza bi videla kao "UPDATE EMPLOYEES SET SALARY = 0 WHERE ID = 32" i "UPDATE EMPLOYEES SET SALARY = 1000 WHERE ID = 21"
Dobre baze podataka, kao što je recimo Oracle, su dovoljno pametne da prepoznaju da se radi o istom upitu čak i ako koristiš Statement sa parametrima ubačenim u SQL ali ne preporučujem da se oslanjaš na to. Kod Oracle-a tu opciju moraš "ručno" da uključiš (Cursor sharing), tj. po defaultu nije uključena. Pretpostavljam da besplatne baze podataka nisu toliko "pametne" ali možda i grešim.
Ne preporučujem da se uzdaš u "pamet" baze podataka već lepo koristiš PreparedStatement kada je to potrebno i ne boli te glava.