Gyakorlati alapok III.
SQL (adatbázis)
A JDBC
A JDBC (Java Database Connectivity) a Java-rendszer illesztése egy külső adatbázisra és annak komplex menedzselése szintén nagyobbrészt Java-, kisebbrészt SQL-nyelvi elemeken keresztül. Már a Java 1.1 verziótól kezdve a Standard Edition (JSE) része. A működtető osztályok a java.sql csomagban találhatók, bár kiegészítésként a javax.sql csomag is tartalmaz további, még magasabb szintű működést biztosító osztályokat.
A JDBC voltaképpen egy API (Application Programming Interface), amely
interfészek segítségével teremti meg a kapcsolatot relációs adatbázisok
platform-, és adatbázisfüggetlen elérésére.
A JDBC API szolgáltatásai 3 kategóriába sorolhatók:
-
az adatbázis-kapcsolat létrejöttéért felelős rutinok,
-
az SQL-utasítások végrehajtásáért felelős rutinok,
-
az SQL-lekérdezések eredményeinek feldolgozásáért felelős rutinok.
Mivel az adatbázis-kezelés az informatikának egy nagyon jól kifizetődő
területe, nem meglepő, hogy igen sok adatbázis-kezelő rendszer létezik. A Java
szoftvermérnökei úgy próbálják megoldani ezen sokféle adatbázis-rendszer
Java-nyelvre való illesztését, hogy egyfajta kapcsolódási pontokként csak
interfészeket deklarálnak, az adatbázisszervert készítő cég pedig
kidolgozza azokat meghajtóprogram (driver) formájában. A keletkezett
.jar kiterjesztésű kódokat aztán általában szabad felhasználással elérhetővé
teszik honlapjaikon. Nekünk is valahonnan éppígy le kell vadásznunk a MySQL
driver-ét, hogy alkalmazásunk kommunikálni tudjon a MySQL-kezelővel. A
keresett állománynak nagyjából ilyesféle neve lehet (főként a verziószámban
lehet különbség):
mysql-connector-java-5.1.7-bin.jar
2023-as kiegészítés: nekem működött ebben az évben a mysql-connector-commercial-java-5.1.7-bin.jar állomány is, amelyet a www.java2s.com című oldalról töltöttem le.
A letöltött állományt először mentsük le valahová, majd az adatbázis-alkalmazásunk projektjének nevére jobb egérgombbal kattintva hozzunk létre benne egy lib nevű könyvtárt (ez kváziszabványos eljárás külső állományok tárolására):
File -> New -> Folder
Majd a létrehozott lib könyvtárnévre jobb egérgombbal kattintva adjuk ki a következő parancsot...
Import -> Archive File -> Browse
...amely feldobja aktuális gépünk könyvtárszerkezetét, hogy benne megkereshessük a lementett JAR-állományt.
Ezt ezután mint "külső" erőforrást hozzá kell adnunk a projekthez, amelyet szintén jobb egérgombbal kattintva a...
Properties -> Build Path -> Add to Build Path
...parancsokkal tehetünk meg.
Végeredménye a Package Explorer-ben a következő lesz:
Egy JDBC adatbázis-kapcsolat a következő szabványos műveletek szisztematikus végrehajtását jelenti:
-
az adatbázis-meghajtó betöltése - ezt a rutint nevezik driver regisztrációnak is,
-
az adatbázis-kapcsolat kiépítése (Connection),
-
az SQL-művelet végrehajtásához szükséges Statement példány létrehozása, amelyek lehetnek:
-
Statement (statikus utasítás),
-
PreparedStatement (dinamikusan paraméterezett utasítás),
-
CallableStatement (tárolt eljáráshívás),
-
-
az SQL-művelet eredményének feldolgozása (ez az utasítások jellegéből adódóan sokféle lehet, sokszor ResultSet objektummal van feldolgozva),
-
a létrehozott objektum lezárása, ezek lehetnek:
-
ResultSet,
Statement, -
Connection.
-
A részletezett műveleti eseményeket a lenti ábrán folyamatában vizsgálhatjuk meg:
Forrás - Source - Antal Margit: Java alapú webtechnológiák - 162.oldal
Most pedig nézzük meg a fenti, számozott lépéseket Java-specifikusan is, azaz konkrét Java kódokat felhasználva:
1.
Class.forName("com.mysql.jdbc.Driver");
2.
Connection connection = null;
connection = DriverManager.getConnection(DataBase_URL,USER,PASSWORD);
3.
Statement statement = null;
statement = connection.createStatement();
4.
String sqlString;
sqlString = "...SQL...";
ResultSet resultSet = statement.executeQuery(sqlString);
while(resultSet.next()){...}
5.
resultSet.close();
statement.close();
connection.close();
A kódok ebben a formátumban természetesen nem futtathatók, a rutinokat a következő, Alapszintű kapcsolódás és lekérdezés című fejezetben fogjuk összeilleszteni.