package com.cs.srs.model; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Date; import java.util.HashMap; import java.util.ArrayList; import com.cs.srs.Config; import com.cs.srs.model.data.SRSData; public abstract class Model { private static volatile Connection connect; private Statement statement; private PreparedStatement preparedStatement; private ResultSet resultSet; private String table; protected abstract SRSData createDataByResultSet(ResultSet result) throws SQLException; public Model(String table) { this.table = table; try { Class.forName("com.mysql.jdbc.Driver"); } catch(ClassNotFoundException e) { e.printStackTrace(); } try { connect = getConnect(); statement = connect.createStatement(); } catch(SQLException e) { e.printStackTrace(); } } public String getTableName() { return table; } public Connection getConnect() throws SQLException { if (connect == null) { synchronized(Connection.class) { if (connect == null) { connect = DriverManager.getConnection("jdbc:mysql://" + Config.db_host + "/" + Config.db_name + "?user=" + Config.db_username + "&password=" + Config.db_password); } } } return connect; } public boolean update(String updateQuery) { try { return statement.execute(updateQuery); } catch(SQLException e) { e.printStackTrace(); } return false; } public ResultSet query(String query) { try { return statement.executeQuery(query); } catch(SQLException e) { e.printStackTrace(); } return null; } public boolean insert(String[] values) { String query = "INSERT INTO " + table + " VALUES ("; for(int i = 0; i < values.length - 1; i++) { query += values[i] + ", "; } query += values[values.length - 1] + ")"; // System.out.println(query); return update(query); } public boolean updateById(HashMap<String, String> valuePairs, int id) { String query = "UPDATE " + table + " SET "; Object[] colNames = valuePairs.keySet().toArray(); for (int i = 0; i < colNames.length - 1; i++) { query += colNames[i] + "=" + valuePairs.get(colNames[i]) + ", "; } query += colNames[colNames.length - 1] + "=" + valuePairs.get(colNames[colNames.length - 1]) + " WHERE id=" + id; // System.out.println(query); return update(query); } public ResultSet findById(int id) { return simpleFind("id", id + "", "id", true); } public ResultSet simpleFind(String field, String value, String orderBase, boolean isAsc) { String order = (isAsc)? "ASC":"DESC"; String findQuery = "SELECT * FROM " + table + " WHERE " + field + "=" + value + " ORDER BY " + orderBase + " " + order; return query(findQuery); } public ResultSet findAll() { return query("SELECT * FROM " + table); } public ArrayList<SRSData> simpleFindItem(String field, String value, String orderBase, boolean isAsc) { ArrayList<SRSData> items = new ArrayList<SRSData>(); ResultSet result = simpleFind(field, value, orderBase, isAsc); try { while(result.next()) { SRSData item = createDataByResultSet(result); items.add(item); } } catch(SQLException e) { e.printStackTrace(); } return items; } public ArrayList<SRSData> findAllItem() { return simpleFindItem("1", "1", "id", true); } public SRSData findItemById(int id) { ResultSet result = findById(id); try { if (result.next()) { SRSData data = createDataByResultSet(result); data.setId(id); return data; } else { return null; } } catch (SQLException e) { e.printStackTrace(); return null; } } public boolean save(SRSData data) { if (data.getId() != 0) { ResultSet existingData = findById(data.getId()); try { if(existingData.next()) { return updateById(data.getValuePair(), data.getId()); } else { return insert(data.getValueTuple()); } } catch(SQLException e) { e.printStackTrace(); } } else { return insert(data.getValueTuple()); } return false; } public boolean remove(SRSData data) { return remove(data.getId()); } public boolean remove(int id) { return remove("id", id + ""); } public boolean remove(String field, String value) { String removeQuery = "DELETE FROM " + table + " WHERE " + field + "=" + value; return update(removeQuery); } }