[[oktatas:programozas:java:java adatbázis|< Java adatbázis]] ====== Több interfész használata ====== * **Szerző:** Sallai András * Copyright (c) 2020, Sallai András * Szerkesztve: 2020, 2021, 2023 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]] * Web: https://szit.hu ===== Tervek ===== A következő tervben az adatok három helyről jöhetnek: * MariaDB (MySQL) * SQLite * Fájlból, szimpla fájlkezeléssel {{:oktatas:programozas:java:java_adatbazis:osztalyok_interfeszek.png|}} ==== UML ==== {{:oktatas:programozas:java:java_adatbazis:osztalyok_interfeszek_uml.png|}} ===== Adattárolók ===== create database surubt; use surubt; create table dolgozok ( az int not null primary key auto_increment, nev varchar(30), telepules varchar(30), fizetes double ); create table dolgozok ( az integer not null primary key autoincrement, nev text, telepules text, fizetes real ); 1:Park Elemér:Szolnok:3850000 2:Teri Aladár:Szeged:2785000 ===== Dolgozo ===== public class Dolgozo { int az; String nev; String telepules; double fizetes; } ===== iDatabase ===== import java.sql.Connection; public interface iDatabase { public Connection connectDb(); public void closeDb(Connection conn); } ===== Mariadb ===== 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 ===== 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 ===== import java.util.List; public interface iData { public List getEmployees(); public void insertEmployee(String name, String city); } ===== DatabaseHandler ===== 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 getEmployees() { List 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 tryGetEmployees() throws SQLException { List 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 ===== 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 tryGetEmployees() throws FileNotFoundException { List 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 getEmployees() { List 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 ===== import java.util.List; public class Data { iData data; public Data(iData data) { this.data = data; } public List getEmployees() { return this.data.getEmployees(); } public void insertEmployee(String name, String city) { this.data.insertEmployee(name, city); } } ===== Program01 ===== import java.util.ArrayList; import java.util.List; public class Program01 { public static void main(String[] args) { List 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"); } }