[[oktatas:programozas:java:java adatbázis:mariadb|< Mariadb]] ====== MariaDB osztályokkal ====== * **Szerző:** Sallai András * Copyright (c) 2020, Sallai András * Szerkesztve: 2020, 2023 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]] * Web: https://szit.hu ===== Lekérdezés ===== projekt01/ |-Dolgozo.java |-Makefile |-Mariadb.java `-Program01.java class Dolgozo { int az; String nev; String telepules; double fizetes; } import java.sql.SQLException; import java.sql.Connection; import java.sql.Statement; import java.sql.ResultSet; import java.sql.DriverManager; import java.util.List; import java.util.ArrayList; class Mariadb { String host = "localhost"; String port = "3306"; String db = "surubt"; String user = "surubt"; String pass = "titok"; Connection conn; public Mariadb() { this.conn = null; } public void connectDb() { try { tryConnectDb(); }catch(SQLException ex) { System.err.println("Hiba! A kapcsolódás sikertelen!"); } } public void tryConnectDb() throws SQLException { String url = "jdbc:mariadb://" + host + ":" + port + "/"+ db; this.conn = DriverManager.getConnection(url, user, pass); } public void closeDb() { try { tryCloseDb(); }catch(SQLException ex) { System.err.println("Hiba! Az adatbázis bezárása sikertelen!"); } } public void tryCloseDb() throws SQLException { this.conn.close(); } public List getWorkmen() { List dolgozok = null; try { dolgozok = tryGetWorkmen(); }catch(SQLException ex) { System.err.println("Hiba! A lekérdezés sikertelen"); } return dolgozok; } public List tryGetWorkmen() throws SQLException { connectDb(); String sql = "select az, nev, telepules, fizetes from dolgozok"; Statement stmt = this.conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); List dolgozok = new ArrayList<>(); while(rs.next()) { Dolgozo dolgozo = new Dolgozo(); dolgozo.az = rs.getInt("az"); dolgozo.nev = rs.getString("nev"); dolgozo.fizetes = rs.getDouble("fizetes"); dolgozok.add(dolgozo); } closeDb(); return dolgozok; } } import java.util.List; import java.util.ArrayList; class Program01 { public static void main(String[] args) { Mariadb mariadb = new Mariadb(); List dolgozok = new ArrayList<>(); dolgozok = mariadb.getWorkmen(); for(Dolgozo dolgozo: dolgozok) { System.out.println(dolgozo.nev); } } } SOURCES=Program01.java all: javac $(SOURCES) runl: java -cp .:mariadb-java-client-2.7.1.jar Program01 ===== Változtatás ===== Ha valamit változtatunk az adatbázison, vagy új adatot hozunk létre, a lekérdezéshez hasonlóan kezdjük, de az SQL utasítás futtatását az executeUpdate() függvénnyel végezzük el. stmt.executeUpdate(sql); ===== Beszúrás ===== Szimpla Statement használata: //... class Mariadb { //... public void insertEmployee(String nev, String telepules) { try { tryInsertEmployee(nev, telepules); }catch(SQLException ex) { System.err.println("Hiba! A beszúrás sikertelen"); } } public void tryInsertEmployee(String nev, String telepules) throws SQLException { connectDb(); String sql = "insert into dolgozok" + " (nev, telepules) values" + " ("+ "\"" + nev + "\","+ "\"" + telepules + "\"" + ")"; Statement stmt = this.conn.createStatement(); stmt.execute(sql); closeDb(); } } ===== PreparedStatement ===== Beszúrás egyszerűbben és biztonságosan. //... class Mariadb { //... public void insertEmployee(String nev, String telepules) { try { tryInsertEmployee(nev, telepules); }catch(SQLException ex) { System.err.println("Hiba! A beszúrás sikertelen"); System.err.println(ex.getMessage()); } } public void tryInsertEmployee(String nev, String telepules) throws SQLException { connectDb(); String sql = "insert into dolgozok" + " (nev, telepules) values" + " (?, ?)"; PreparedStatement pstmt = this.conn.prepareStatement(sql); pstmt.setString(1, nev); pstmt.setString(2, telepules); pstmt.execute(); closeDb(); } } Néhány használható metódus a PreparedStatement objektumon: * setString() * setDate() * setBoolean() * setInt() * setDouble() * setTime() * setTimestamp() - dátumot és időt is tárol Ha dátum string típusként érkezik, konvertálni kell: pstmt.setDate(3, java.sql.Date.valueOf(szuletes)); ===== Fordítás és futtatás ===== A Makefile segít megérteni, milyen parancssori parancsokkal fordíthatjuk, futtathatjuk a JDBC-t használó programunk. SOURCES=Program01.java all: javac $(SOURCES) runl: xterm -e "java -cp .:/usr/share/java/mysql.jar Program01 & read" runw: cmd /c "java -cp .:c:\javalibs\mysql-connector-java-verzioszam.jar Program01 && pause" A következő példák futtató batch-fájl és futtató-script írását szemlélteti: java -classpath ".;mysql-connector-java-5.1.24-bin.jar" Program01 java -classpath ".:mysql-connector-java-5.1.24-bin.jar" Program01 Vegyük észre, a -classpath paraméterében (;) pontosvesszőt használtam. Linux esetén ezt le kell cserélni (:) kettőspontra. A verziószámot ki kell cserélni az aktuálisra. Megadhatunk abszolút útvonalat is, mint azt a Makefile-ban tettük.