Statement

A Statement interfész tartalmazza az alap metódusokat az SQL utasítások végrehajtásához és feldolgozásához. Ilyen típusú objektumhoz a Connection objektum createStatement metódusának meghívásával juthatunk. Ennek a metódusnak több fajtája van melyekkel optimalizálhatjuk az adatbázishoz való hozzáférést úgy, hogy megadjuk a ResultSet interfészben definiált konstansok közül valamelyiket:

A Statement futtatása

A Statement objektumot többféleképpen lehet futtatni, mindegyik metódus paraméteréül magát az SQL utasítást kell megadni. Ezek mindegyikének meghívásakor automatikusan lezárulnak az esetlegesen korábban létrejött, ugyanezen Statement objektumhoz kötődő eredménytáblák, ezért ügyelni kell, hogy új SQL utasítás végrahajtása előtt a korábbi ereménytáblák feldolgozásra kerüljenek.

A Statement bezárása

A Statement objektumot ugyanezen objektum close metódusának megívásával zárhatjuk be melyről minden esetben nekünk kell gondoskodni, különben egy idő után azt fogjuk tapasztalni, hogy elfogyott a memóriánk. A Statement objektum bezárásakor automatikusan bezáródnak az esetlegesen létező ResultSet objektumok is, így azokat nekünk külön nem kell bezárnunk, bár lehetőségünk van rá a ResultSet objektum close metódusának meghívásával.

PreparedStatement

A PreparedStatement interfész a Statement interfészt terjeszti ki újabb tulajdonságokkal melyek lehetővé teszik az előfordított utasítások használatát adatbázisunkban. Míg a Statement interfész alkalmazása esetén minden egyes újabb utasítás végrehajtásának alkalmával át kell adni az adatbáziskezelőnek az utasítás teljes szövegét, illetve az adatbáziskezelőnek fel kell dolgoznia azt, addig a PreparedStatement interfész alkalmazása esetén elegendő ezt egy alkalommal megtenni, majd a későbbiekben – az újbóli használat alkalmával – már csak a paramétereket kell átadni az adatbázisban lévő előfordított utasításnak. Ennek a technológiának az előnyét nyilván akkor tudjuk leginkább kamatoztatni, ha ugyanazt az utasítást ciklikusan többször hajtjuk végre egymás után más-más paraméterekkel, mivel az utasításunk előfordított (csőre töltött) állapotban figyel az adatbáziskezelőben, melynek csak a paramétereit kell megadni és már futtatható is.

PreparedStatement létrehozása

Ezért az SQL utasítás szövegét már a PreparedStatement objektumot létrehozó metódus paramétereként meg kell adni, melyben a paraméterek helyét '?' karakterrel kell kijelölnünk. Ez a paraméter átadódik a PreparedStatement interfészt implementáló osztály konstruktorának, mely továbbítja azt az adatbázis-kezelő felé, amely létrehozza az előkészített utasítást. PreparedStatement objektumhoz a Connection objektum prepareStatement metódus meghívásával juthatunk, melynek – mint ahogy a Statement interfész bemutatásánál láthattuk – szintén többféle típusa van melyekkel speciális, a ResultSet objektummal kapcsolatos tulajdonságokat állíthatunk be.

PreparedStatement futtatása

A PreparedStatement végrehajtása előtt minden kijelölt paramétert inicializálni kell, melyeket a set<típus> kezdetű metódusokkal tehetünk meg úgy, hogy a metódus első paramétereként egy egész számmal hivatkozunk az SQL szövegében kijelölt paraméterre, a metódus második paraméterében pedig megadjuk magát az értéket. A balesetek elkerülése végett, üdvös dolog ha ezt a tevékenységet megelőzi egy clearParameters metódus meghívása, amely törli az összes, korábban beállított értéket. Mindezek után végrehajthatjuk SQL utasításunkat a PreparedStatement objektum execute, executeQuery vagy executeUpdate metódusának megívásával melyeknek különbözőségeiről fentebb írtam.

Egy konkrét példa a PreparedStatement interfész alkalmazására:

PreparedStatement pstmt = con.prepareStatement("INSERT INTO PICTURE (KEP, KOZEPES_KEP, KEP_IDX, SORREND, ALBUM, VISIBLE) VALUES (?, ?, ?, ?, ?, ?)");
pstmt.clearParameters();
pstmt.setBlob(1, sbKep);
pstmt.setBlob(2, sbKozepesKep);
pstmt.setBlob(3, sbKepIndex);
pstmt.setInt(4, sorrend);
pstmt.setString(5, album);
pstmt.setBoolean(6, visible);
pstmt.execute();
pstmt.close();

PreparedStatement bezárása

A PreparedStatement objektum bezárására ugyanazok a szabályok érvényesek mint a Statement objektum bezárására.