[[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.