Tartalomjegyzék

< Java adatbázis

Interfész használata

Bevezetés

Az interfész lehetővé teszi, hogy ahol az adatokat felhasználjuk, ott döntsük el, melyik adatbázist használjuk.

Az alábbi példában App osztályban példányosítjuk a Data osztályt, ahol a konstruktor számára átadunk egy olyan osztályt, amely implementálja a iDatabase interfészt.

Az iDatabase interfészt az Sqlite és Mariadb osztály implementálja. Ezek adhatók meg paraméternek. A „new Sqlite()” esetén az adatok SQLite adatbázisban tárolódnak. A „new Mariadb()” esetén az adatok MariaDB adatbázisban tárolódnak.

Adatbázis

mysql_create.sql
create database surubt
character set utf8
collate utf8_hungarian_ci;
 
grant all privileges
on surubt.*
to surubt@localhost
identified by 'titok';
 
use surubt;
 
create table employees (
    id int not null primary key auto_increment,
    name varchar(50),
    city varchar(50),
    salary double
);
sqlite_create.sql
create table employees (
    id integer not null primary key autoincrement,
    name text,
    city text,
    salary real
);
insert.sql
insert into employees
(name, city, salary)
values
("Para Béla", "Szolnok", 347),
("Csend Irén", "Szeged", 342);

Employee

Employee.java
public class Employee {
    int id;
    String name;
    String city;
    double salary;    
}

DatabaseConnection Interfész

Írjuk le, milyen metódusokra van szükség az adatbázis elérése során:

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

MariadbConnection

A MariaDB használata:

MariadbConnection.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
public class MariadbConnection implements DatabaseConnection {
    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());
        }
    }    
}

SqliteConnection

SqliteConnection.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
public class SqliteConnection implements DatabaseConnection {
    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!");
        }
    }
}

A surubt.sqlite fájlnak a projekt gyökérkönyvtárában a helye.

DataService

DataService.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 DataService {
    DatabaseConnection database;
    public DataService(DatabaseConnection database) {
        this.database = database;
    }
    public List<Employee> getEmployees() {
        List<Employee> employee = new ArrayList<>();
        try {
            employee = tryGetEmployees();
        }catch(SQLException e) {
            System.err.println("Hiba! A lekérdezés sikertelen!");
            System.err.println(e.getMessage());
        }
        return employee;
    }
    public List<Employee> tryGetEmployees() throws SQLException {
        List<Employee> employees = new ArrayList<>();
        String sql = "select id, name, city, salary from employees";
        Connection conn = database.connectDb();
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(sql);
        while(rs.next()) {
            Employee employee = new Employee();
            employee.id = rs.getInt("id");
            employee.name = rs.getString("name");
            employee.city = rs.getString("city");
            employee.salary = rs.getDouble("salary");
            employees.add(employee);
        }
        database.closeDb(conn);
        return employees;
    }
 
    public void tryInsertEmployee(String name, String city) throws SQLException {
        Connection conn = database.connectDb();
        String sql = "insert into employees " +
                "(name, city) 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!");
        }
    }
 
}

App

App.java
import java.util.ArrayList;
import java.util.List;
 
public class App {
 
    public static void main(String[] args) {
        List<Employee> employees = new ArrayList<>();
        DataService data = new DataService(new MariadbConnection());
 
        employees = data.getEmployees();
        for(Employee employee : employees) {            
            System.out.println(employee.name);
        }
        data.insertEmployee("Park Elemér", "Szolnok");
 
    }
 
}