[[oktatas:programozas:java:java adatbázis|< Java adatbázis]]
====== Interfész használata ======
* **Szerző:** Sallai András
* Copyright (c) 2020, Sallai András
* Szerkesztve: 2020, 2022
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]]
* Web: https://szit.hu
===== 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.
{{:oktatas:programozas:java:java_adatbazis:interfesz_hasznalata.png|}}
{{:oktatas:programozas:java:java_adatbazis:interfesz_hasznalat_uml_v2.png|}}
===== Adatbázis =====
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
);
create table employees (
id integer not null primary key autoincrement,
name text,
city text,
salary real
);
insert into employees
(name, city, salary)
values
("Para Béla", "Szolnok", 347),
("Csend Irén", "Szeged", 342);
===== Employee =====
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:
import java.sql.Connection;
public interface DatabaseConnection {
public Connection connectDb();
public void closeDb(Connection conn);
}
===== MariadbConnection =====
A MariaDB használata:
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 =====
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 =====
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 getEmployees() {
List 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 tryGetEmployees() throws SQLException {
List 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 =====
import java.util.ArrayList;
import java.util.List;
public class App {
public static void main(String[] args) {
List 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");
}
}