diff --git a/02/src/de/dis2017/data/EstateAgent.java b/02/src/de/dis2017/data/EstateAgent.java new file mode 100644 index 0000000..99fa338 --- /dev/null +++ b/02/src/de/dis2017/data/EstateAgent.java @@ -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; + } +} diff --git a/02/src/de/dis2017/data/Makler.java b/02/src/de/dis2017/data/Makler.java deleted file mode 100644 index fa885da..0000000 --- a/02/src/de/dis2017/data/Makler.java +++ /dev/null @@ -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 _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(); + } + } +}