Tartalomjegyzék

< Java adatbázis

Több interfész használata

Tervek

A következő tervben az adatok három helyről jöhetnek:

UML

Adattárolók

dolgozok_mariadb.sql
create database surubt;
use surubt;
create table dolgozok (
    az int not null primary key auto_increment,
    nev varchar(30),
    telepules varchar(30),
    fizetes double
);
dolgozok_sqlite.sql
create table dolgozok (
    az integer not null primary key autoincrement,
    nev text,
    telepules text,
    fizetes real
);
dolgozok.txt
1:Park Elemér:Szolnok:3850000
2:Teri Aladár:Szeged:2785000

Dolgozo

Dolgozo.java
public class Dolgozo {
    int az;
    String nev;
    String telepules;
    double fizetes;    
}

iDatabase

iDatabase.java
import java.sql.Connection;
 
public interface iDatabase {
    public Connection connectDb();
    public void closeDb(Connection conn);
}

Mariadb

Mariadb.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
public class Mariadb implements iDatabase {
 
    private Connection tryConnectDb() throws SQLException {
        String url = "jdbc:mariadb://localhost:3306/surubt";
        return DriverManager.getConnection(url, 
                "surubt", "titok");
    }
 
    public Connection connectDb(){
        Connection conn = null;
        try {
            conn = tryConnectDb();
        }catch(SQLException e) {
            System.err.println("Hiba! A kapcsolódás sikertelen");
            System.err.println(e.getMessage());
        }
        return conn;
    }
 
    private void tryCloseDb(Connection conn) throws SQLException {
        conn.close();
    }
 
    public void closeDb(Connection conn){        
        try {
            tryCloseDb(conn);
        }catch(SQLException e) {
            System.err.println("Hiba! A kapcsolat zárása sikertelen!");
            System.err.println(e.getMessage());
        }
    }
 
}

Sqlite

Sqlite.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
public class Sqlite implements iDatabase {
    public Connection tryConnectDb() throws SQLException {
        String url = "jdbc:sqlite:surubt.sqlite";
        return DriverManager.getConnection(url);
    }
    public Connection connectDb() {
        Connection conn = null;
        try {
            conn = tryConnectDb();
        }catch(SQLException ex) {
            System.err.println("Hiba! A kapcsolódás sikertelen!");
        }
        return conn;
    }
    public void tryCloseDb(Connection conn) throws SQLException {
        conn.close();
    }
    public void closeDb(Connection conn) {
        try {
            tryCloseDb(conn);
        } catch (SQLException ex) {
            System.err.println("Hiba! A bezárás sikertelen!");
        }
    }
}

iData

iData.java
import java.util.List;
 
public interface iData {
    public List<Dolgozo> getEmployees();
    public void insertEmployee(String name, String city);
}

DatabaseHandler

DatabaseHandler.java
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
 
public class DatabaseHandler implements iData {
 
    iDatabase database;
 
    public DatabaseHandler(iDatabase database) {
        this.database = database;
    }
 
    public List<Dolgozo> getEmployees() {
        List<Dolgozo> dolgozok = new ArrayList<>();
        try {
            dolgozok = tryGetEmployees();
        }catch(SQLException e) {
            System.err.println("Hiba! A lekérdezés sikertelen!");
            System.err.println(e.getMessage());
        }
        return dolgozok;
    }
 
    public List<Dolgozo> tryGetEmployees() throws SQLException {
        List<Dolgozo> dolgozok = new ArrayList<>();
        String sql = "select az, nev, telepules, fizetes from dolgozok";
        Connection conn = database.connectDb();
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(sql);
        while(rs.next()) {
            Dolgozo dolgozo = new Dolgozo();
            dolgozo.az = rs.getInt("az");
            dolgozo.nev = rs.getString("nev");
            dolgozo.telepules = rs.getString("telepules");
            dolgozo.fizetes = rs.getDouble("fizetes");
            dolgozok.add(dolgozo);
        }
        database.closeDb(conn);
        return dolgozok;
    }
 
    public void tryInsertEmployee(String name, String city) throws SQLException {
        Connection conn = database.connectDb();
        String sql = "insert into dolgozok " +
                "(nev, telepules) values " +
                "(?, ?)";
        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, name);
        pstmt.setString(2, city);
        pstmt.execute();
        database.closeDb(conn);
    }
 
    public void insertEmployee(String name, String city) {
        try {
            tryInsertEmployee(name, city);
        } catch (SQLException ex) {
            System.err.println("Hiba! A beszúrás sikertelen!");
        }
    }
 
}

FileHandler

FileHandler.java
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
 
public class FileHandler implements iData {
 
    public List<Dolgozo> tryGetEmployees() throws FileNotFoundException {
        List<Dolgozo> dolgozok = new ArrayList<>();
        File file = new File("surubt.txt");
        Scanner scanner = new Scanner(file);
 
        while(scanner.hasNext()) {
            String line = scanner.nextLine();
            String[] lineArray = line.split(":");
            Dolgozo dolgozo = new Dolgozo();
            dolgozo.az = Integer.parseInt(lineArray[0]);
            dolgozo.nev = lineArray[1];
            dolgozo.telepules = lineArray[2];
            dolgozo.fizetes = Double.parseDouble(lineArray[3]);
            dolgozok.add(dolgozo);
        }
 
        return dolgozok;
    }
    public List<Dolgozo> getEmployees() {
        List<Dolgozo> dolgozok = new ArrayList<>();
        try {
            dolgozok = tryGetEmployees();
        } catch (FileNotFoundException e) {
            System.err.println("Hiba! A fájl nem található!");
        }
        return dolgozok;
    }
 
    public void tryInsertEmployee(String name, String city) throws IOException {
        FileWriter fileWriter = new FileWriter("surubt.txt", true);
        PrintWriter printWriter = new PrintWriter(fileWriter);
        StringBuilder data = new StringBuilder();
        data.append("1:");
        data.append(name + ":");
        data.append(city + ":0");
 
 
        printWriter.println(data.toString());
        printWriter.close();
    }
 
    public void insertEmployee(String name, String city) {
        try {
            tryInsertEmployee(name, city);
        } catch (IOException ex) {
            System.err.println("Hiba! A fájl írása sikertelen!");
            System.err.println(ex.getStackTrace());
        }
    }
}

Data

Data.java
import java.util.List;
 
public class Data {
    iData data;
    public Data(iData data) {
        this.data = data;
 
    }
 
    public List<Dolgozo> getEmployees() {
        return this.data.getEmployees();
    }
 
    public void insertEmployee(String name, String city) {
        this.data.insertEmployee(name, city);
    }
}

Program01

Program01.java
import java.util.ArrayList;
import java.util.List;
 
public class Program01 {
 
    public static void main(String[] args) {
        List<Dolgozo> dolgozok = new ArrayList<>();
 
        /* itt határozzuk meg hol tároljuk az adatokat */
        //Data data = new Data(new FileHandler());
        //Data data = new Data(new DatabaseHandler(new Mariadb()));
        Data data = new Data(new DatabaseHandler(new Sqlite()));
 
        dolgozok = data.getEmployees();
        for(Dolgozo dolgozo : dolgozok) {            
            System.out.println(dolgozo.nev);
        }
        data.insertEmployee("Park Elemér", "Szolnok");
    }
}