JDBC gyakorlat
|
Ez itt egy kezdőknek (de talán mégse csak nekik...) szóló cikk lesz
a JDBC-ről. Először az alapokat fogom bemutatni, ehhez kell egy
Java Development Kit, egy MySQL adatbázis-kezelő és egy JDBC driver
MySQL-hez, valamint Java és SQL ismeretek. A JDBC driver beüzemelése nem
nehéz, csupán a Java classpath-ba kell beírni a JDBC driver (ami valójában egy JAR fájl) útvonalát
(mivel a classpath meghatározása szintén alap Java dolog így erre sem térnék
ki). Szóval elméletileg minden kész ahhoz hogy adatbázis eléréssel ruházzuk
fel programjainkat. Első
feladatunk hogy létrehozzunk egy MySQL táblát. A példa kedvéért csináljunk
egy fórumot ami a lokális gépen fog futni. Ehhez az adatbázis tábla: CREATE TABLE
forum( id INT UNSIGNED
NOT NULL PRIMARY KEY auto_increment, user
VARCHAR(40) NOT NULL, email
VARCHAR(80) NOT NULL, comment TEXT ); Ezután jöhet a
lényeg. A JDBC kapcsolat teremtése a MYSQL-el. Ehhez először importálni
kell a java.sql csomagot.
Ezután példányosítani kell az Driver osztályt hogy használni tudjuk, majd fel kell építeni a kapcsolatot az
adatbázissal. Miután az adatbázis kapcsolat létrejött, indíthatjuk a
tranzakciókat az adatbázis felé. Alapállapotban az adatbázis kapcsolat
felépülése után automatikusan elküldi az adatbázisnak az adatokat. Lássuk a
példát: //osztály
implementációk import java.sql; //Osztály
létrehozás stb... ... //Adatbázis
példányosítás Class.forName("org.gjt.mm.mysql.Driver").newInstance(); //org.gjt.mm.mysql.Driver
Jáva driver implementáció java.sql.Connection
con; //
Jáva kapcsolat prezentálása con=DriverManager.getConnection("jdbc:mysql://localhost/forum?”+ „user=user&password=password");
Amint látható
az adatbázis kapcsolatot a DriverManager osztály getConnection metódusa építi fel. Az adatbázis kapcsolatot URL formában kell megadni,
melynek felépítése a következő: jdbc:adatbázis_típusa://adatbázis_host[:port]/adatbázis_neve?user=név&password=
jelszó FIGYELEM! Az
adatbázis kapcsolat létrehozása SQLException kivételt okozhat így azt megfelelően kezelni kell. Ehhez létezik
más módszer is, tessék utánanézni a Java API-ba. Ezek után (ha
minden jól ment), van egy élő adatbázis kapcsolatunk az
adatbázis-kezelővel. A következő lépésben csináljunk egy szabvány select lekérdezést majd az eredményt írjuk ki
a szabvány kimenetre. Az adatbázis
utasítás végrehajtása háromféleképpen történhet, ehhez három interfész van
deklarálva. Ezek a következők: – Statement: Egyszerü SQL utasítás végrehajtására
képes – PreparedStatement: Olyan utasítások hajthatók végre vele
melyeknek bemeneti értéke is van. – CallableStatement: Tárolt, ki és bemeneti értékekkel
rendelkező SQL utasítások végrehajtására Lássuk hogy is
megy ez: Statement
stmt=con.createStatement(); //
A Connection intefész createStatment metódusának visszatérési értéke //
egy Statement objektum amely a apcsolathoz tartozó végrehajtásért //
felelős Statement interfészt adja vissza. ResultSet //
result=stmt.executeQuery("SELECT id,user,comment FROM forum"); A //
Statement interface három metódust tartalmaz SQL kérések //
végrehajtásához. Első (amit a példánál használunk), az executeQuery //
metódus, SELECT utasítások
végrehajtására szolgál és ResultSet //
típusu objektumot ad vissza. A másik, az UPDATE, INSERT és hasonló //
kérések végrehajtása (melyek nem adnak vissza eredményt) //
az executeUpdate metódus, ennek visszatérési értéke mindig //
0. Valamint az execute metódus amely akkor használatos ha az SQL //
utasítás többfajta eredményt is visszaad. A ResultSet objektum //
az eredménytáblát reprezentálja. A next metódus meghívásával //
a következő eredménysorra ugrik, amennyiben nincs több eredménysor, //
hamis értéket ad vissza. Tehát a kód: int id; String
username; String
comment; while(result) { //
Ahhoz hogy az SQL eredményt Jávában használni tudjuk azt megfelelő //
típusra kell hozni, erre a ResultSet osztály beépített metódusokat //
tartalmaz. A metódusok az SQL eredménysor által visszaadott értékek //
számát vagy nevét várják vissza (a legtöbb metódusból int és //
String-et váró változat létezik) id=result.getInt(1); username=result.getString(2); comment=result.getString(3); //Ezután kiírjuk az értékeket System.out.println("id="+id+"
-> "+username+" -> "+comment); } Eddig
egyszerű volt az életünk, nem kellett az SQL kérésbe adatokat bevinni...
most megnézzük hogy hogyan zajlana egy bizonyos sor lekérdezése. Mivel itt
bemenő adatokat is kezelni kell, preparedStatement interfészt fogjuk használni. String query="SELECT comment FROM forum WHERE id=?"; int id=8; //Hibakezelés try { //PreparedStatement
interfész átvétele a kapcsolatból, //és előfordítás PreparedStatement
pstmt=conn.preparedStatement(query); } catch(SQLException
e) { System.out.println("SQL Hiba!"); } try { //Beállítjuk
az értéket az SQL querynek pstmt.setInt(1,id); // Az
első argumentum annak a sorszáma amelyik helyre a queryben // az értéket be akarjuk helyetesíteni,
a második argumentum maga // az érték. ResultSet result=pstmt.executeQuery(); // Végrehajtja
az előfordított utasítást // Az eredmény feldolgozása ugyanúgy
folyik mint az elöző esetben. }catch(SQLException
e) { System.out.println("SQL Hiba!"); } A
lekérdezéseket a felkínált interfészekkel többféleképpen meglehet valósítani,
itt csak lehetséges megoldást ismertettem. Mindenkinek jó kódolást. |
Háber János |