Tartalomjegyzék
MariaDB osztályokkal
- Szerző: Sallai András
- Copyright © 2020, Sallai András
- Szerkesztve: 2020, 2023
- Licenc: CC BY-SA 4.0
- Web: https://szit.hu
Lekérdezés
projekt01/ |-Dolgozo.java |-Makefile |-Mariadb.java `-Program01.java
- Dolgozo.java
class Dolgozo { int az; String nev; String telepules; double fizetes; }
- Mariadb.java
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<Dolgozo> getWorkmen() { List<Dolgozo> dolgozok = null; try { dolgozok = tryGetWorkmen(); }catch(SQLException ex) { System.err.println("Hiba! A lekérdezés sikertelen"); } return dolgozok; } public List<Dolgozo> tryGetWorkmen() throws SQLException { connectDb(); String sql = "select az, nev, telepules, fizetes from dolgozok"; Statement stmt = this.conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); List<Dolgozo> 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; } }
- Program01.java
import java.util.List; import java.util.ArrayList; class Program01 { public static void main(String[] args) { Mariadb mariadb = new Mariadb(); List<Dolgozo> dolgozok = new ArrayList<>(); dolgozok = mariadb.getWorkmen(); for(Dolgozo dolgozo: dolgozok) { System.out.println(dolgozo.nev); } } }
- Makefile
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.
- Makefile
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:
- startProgram01.cmd
java -classpath ".;mysql-connector-java-5.1.24-bin.jar" Program01
- startProgram01.sh
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.