Tartalomjegyzék

< Mariadb

MariaDB osztályokkal

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:

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.