Moved database interaction into ORM class

Signed-off-by: Jim Martens <github@2martens.de>
This commit is contained in:
2017-04-14 16:45:25 +02:00
parent 2629377995
commit 00fd20c980
3 changed files with 161 additions and 153 deletions

View File

@ -0,0 +1,52 @@
package de.dis2017.data;
/**
* EstateAgent data class
*/
public class EstateAgent {
private int id = -1;
private String name;
private String address;
private String login;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

View File

@ -1,153 +0,0 @@
package de.dis2017.data;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* Makler-Bean
*
* Beispiel-Tabelle:
* CREATE TABLE makler(id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1, NO CACHE) PRIMARY KEY,
* name varchar(255),
* address varchar(255),
* login varchar(40) UNIQUE,
* password varchar(40));
*/
public class Makler {
private int id = -1;
private String name;
private String address;
private String login;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
/**
* Lädt einen Makler aus der Datenbank
* @param id ID des zu ladenden Maklers
* @return Makler-Instanz
*/
public static Makler load(int id) {
try {
// Hole Verbindung
Connection con = DB2ConnectionManager.getInstance().getConnection();
// Erzeuge Anfrage
String selectSQL = "SELECT * FROM makler WHERE id = ?";
PreparedStatement pstmt = con.prepareStatement(selectSQL);
pstmt.setInt(1, id);
// Führe Anfrage aus
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
Makler ts = new Makler();
ts.setId(id);
ts.setName(rs.getString("name"));
ts.setAddress(rs.getString("address"));
ts.setLogin(rs.getString("login"));
ts.setPassword(rs.getString("password"));
rs.close();
pstmt.close();
return ts;
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* Speichert den Makler in der Datenbank. Ist noch keine ID vergeben
* worden, wird die generierte Id von DB2 geholt und dem Model übergeben.
*/
public void save() {
// Hole Verbindung
Connection con = DB2ConnectionManager.getInstance().getConnection();
try {
// FC<ge neues Element hinzu, wenn das Objekt noch keine ID hat.
if (getId() == -1) {
// Achtung, hier wird noch ein Parameter mitgegeben,
// damit spC$ter generierte IDs zurC<ckgeliefert werden!
String insertSQL = "INSERT INTO makler(name, address, login, password) VALUES (?, ?, ?, ?)";
PreparedStatement pstmt = con.prepareStatement(insertSQL,
Statement.RETURN_GENERATED_KEYS);
// Setze Anfrageparameter und fC<hre Anfrage aus
pstmt.setString(1, getName());
pstmt.setString(2, getAddress());
pstmt.setString(3, getLogin());
pstmt.setString(4, getPassword());
pstmt.executeUpdate();
// Hole die Id des engefC<gten Datensatzes
ResultSet rs = pstmt.getGeneratedKeys();
if (rs.next()) {
setId(rs.getInt(1));
}
rs.close();
pstmt.close();
} else {
// Falls schon eine ID vorhanden ist, mache ein Update...
String updateSQL = "UPDATE makler SET name = ?, address = ?, login = ?, password = ? WHERE id = ?";
PreparedStatement pstmt = con.prepareStatement(updateSQL);
// Setze Anfrage Parameter
pstmt.setString(1, getName());
pstmt.setString(2, getAddress());
pstmt.setString(3, getLogin());
pstmt.setString(4, getPassword());
pstmt.setInt(5, getId());
pstmt.executeUpdate();
pstmt.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,109 @@
package de.dis2017.data.db;
import de.dis2017.data.EstateAgent;
import java.sql.*;
import java.util.HashMap;
import java.util.Map;
/**
* Maps the data objects to the database and vice versa.
*/
public class ORM {
private Connection _connection;
private Map<Integer, EstateAgent> _agents;
/**
* Initializes the ORM.
*/
public ORM() {
DB2ConnectionManager _dbManager = DB2ConnectionManager.getInstance();
_connection = _dbManager.getConnection();
_agents = new HashMap<>();
}
/**
* Loads the estate agent with the given ID from database and returns the corresponding object.
*
* @param ID the ID of the agent to load
* @return returns the EstateAgent or null if there is no such agent
*/
public EstateAgent getEstateAgent(int ID) {
if (_agents.containsKey(ID)) {
return _agents.get(ID);
}
try {
// create query
String selectSQL = "SELECT * FROM ESTATEAGENT WHERE ID = ?";
PreparedStatement pstmt = _connection.prepareStatement(selectSQL);
pstmt.setInt(1, ID);
// execute query
ResultSet rs = pstmt.executeQuery();
EstateAgent agent;
if (rs.next()) {
agent = new EstateAgent();
agent.setId(ID);
agent.setName(rs.getString("name"));
agent.setAddress(rs.getString("address"));
agent.setLogin(rs.getString("login"));
agent.setPassword(rs.getString("password"));
rs.close();
pstmt.close();
_agents.put(ID, agent);
return agent;
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* Persists the given agent.
*
* @param agent the agent that should be persisted
*/
public void persist(EstateAgent agent)
{
try {
if (agent.getId() == -1) {
String insertSQL = "INSERT INTO ESTATEAGENT (name, address, login, password) VALUES (?, ?, ?, ?)";
PreparedStatement pstmt = _connection.prepareStatement(insertSQL, Statement.RETURN_GENERATED_KEYS);
pstmt.setString(1, agent.getName());
pstmt.setString(2, agent.getAddress());
pstmt.setString(3, agent.getLogin());
pstmt.setString(4, agent.getPassword());
pstmt.executeUpdate();
ResultSet rs = pstmt.getGeneratedKeys();
if (rs.next()) {
agent.setId(rs.getInt(1));
}
rs.close();
pstmt.close();
} else {
// create query
String updateSQL = "UPDATE ESTATEAGENT SET name = ?, address = ?, password = ? WHERE ID = ?";
PreparedStatement pstmt = _connection.prepareStatement(updateSQL);
pstmt.setString(1, agent.getName());
pstmt.setString(2, agent.getAddress());
pstmt.setString(3, agent.getPassword());
pstmt.setInt(4, agent.getId());
// execute query
pstmt.executeUpdate();
pstmt.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}