Moved database interaction into ORM class
Signed-off-by: Jim Martens <github@2martens.de>
This commit is contained in:
52
02/src/de/dis2017/data/EstateAgent.java
Normal file
52
02/src/de/dis2017/data/EstateAgent.java
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
109
02/src/de/dis2017/data/db/ORM.java
Normal file
109
02/src/de/dis2017/data/db/ORM.java
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user