diff --git a/src/core/operation/Delete.java b/src/core/operation/Delete.java index c9a78c5..9982766 100644 --- a/src/core/operation/Delete.java +++ b/src/core/operation/Delete.java @@ -4,12 +4,16 @@ import core.user.User; import dao.DBManagement; import error.GExcptSQL; +import java.util.HashMap; +import java.util.Map; + public class Delete extends Operation { @Override public void execute(User subject) throws GExcptSQL { - String id = (String)options.get("id"); - String sql = "DELETE FROM graduation_design WHERE id = \'"+ - id+"\'"; - DBManagement.update(sql); + Map map = new HashMap<>(); + map.put("id",(String)options.get("id")); + for(String table:DBManagement.graduationDesignTables){ + DBManagement.delete(table,map); + } } } diff --git a/src/core/operation/Search.java b/src/core/operation/Search.java index 5176b57..73d0af1 100644 --- a/src/core/operation/Search.java +++ b/src/core/operation/Search.java @@ -4,19 +4,18 @@ import core.user.User; import dao.DBManagement; import java.sql.ResultSet; +import java.util.List; +import java.util.Map; public class Search extends Operation { @Override public void execute(User subject) throws Exception { String table = (String)options.get("table"); - String field = (String)options.get("field"); - String value = (String)options.get("value"); + List fields = (List)options.get("fields"); + Map limits = (Map)options.get("limits"); int start = (int)options.get("start"); int end = (int)options.get("end"); - String sql = "SELECT * FROM "+table+ - " WHERE "+field+" = \'"+value+"\'"+ - " limit "+start+", "+end; - ResultSet rs = DBManagement.query(sql); + ResultSet rs = DBManagement.select(fields,table,limits,start,end); //todo } } diff --git a/src/core/operation/Search.json b/src/core/operation/Search.json index 38d8115..c8c3ac4 100644 --- a/src/core/operation/Search.json +++ b/src/core/operation/Search.json @@ -1,6 +1,6 @@ { "table": "java.lang.String", - "field": "java.lang.String", + "fields": "java.util.List", "value": "java.lang.String", "start": "int", "end": "int", diff --git a/src/core/operation/Select.java b/src/core/operation/Select.java index f58ea03..c3f5f18 100644 --- a/src/core/operation/Select.java +++ b/src/core/operation/Select.java @@ -4,19 +4,24 @@ import core.user.User; import dao.DBManagement; import error.GExcptSQL; +import java.util.HashMap; import java.util.Map; public class Select extends Operation { @Override public void execute(User subject) throws GExcptSQL { - String student_id = (String)options.get("student_id"); + Map vMap = new HashMap<>(); + String id = (String)options.get("student_id"); String teacher_id = (String)options.get("teacher_id"); - String id = student_id; - String sql = "INSERT INTO graduation_design VALUES (\'"+ - id+"\', "+ - student_id+"\', "+ - teacher_id+"\', \'m\', \'m\')"; - DBManagement.update(sql); + vMap.put("id",id); + vMap.put("student_id",id); + vMap.put("teacher_id",teacher_id); + DBManagement.insert("graduation_design", vMap); + vMap.remove("student_id"); + vMap.remove("teacher_id"); + for(int i=1;i temporaryProcesses; - private Map> lastProcesses; - private List auxiliaryProcesses; - public void setProcessesByJson(File file){ - //todo - } - public Process getTemporaryProcess(int index){ - return temporaryProcesses.get(index).clone(); - } public Condition getCondition(String userType, List index){ - Condition condition = new Condition(this.lastProcesses.get(userType)); - for(int i:index){ - condition.add(getTemporaryProcess(i)); - } - return condition; + return null; } } diff --git a/src/core/process/TemporaryProcess.java b/src/core/process/TemporaryProcess.java deleted file mode 100644 index 3f22949..0000000 --- a/src/core/process/TemporaryProcess.java +++ /dev/null @@ -1,9 +0,0 @@ -package core.process; - - - -public class TemporaryProcess extends Process { - public TemporaryProcess(String permission, String operationName, String processOptions, String info) throws Exception { - super(permission, operationName, processOptions, info); - } -} diff --git a/src/core/user/utils/AccountManagement.java b/src/core/user/utils/AccountManagement.java index 7246b15..41db8ef 100644 --- a/src/core/user/utils/AccountManagement.java +++ b/src/core/user/utils/AccountManagement.java @@ -12,12 +12,9 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.List; +import static dao.DBManagement.userTables; + public interface AccountManagement { - static String[] userTables = { - "administrator", - "student", - "teacher" - }; static User login(String id, String password) throws GExcptSQL, GExcptAccount, SQLException { ResultSet rs = null; String sql = null; @@ -57,7 +54,7 @@ public interface AccountManagement { for(String info:necessaryInfo){ sql+=info+"\', \'"; } - sql =sql.substring(0,sql.length()-3)+")"; + sql =Utils.cutTail(sql,3)+")"; DBManagement.update(sql); return createUser(userType, necessaryInfo); } diff --git a/src/dao/DBManagement.java b/src/dao/DBManagement.java index c31829e..dd423cc 100644 --- a/src/dao/DBManagement.java +++ b/src/dao/DBManagement.java @@ -1,6 +1,8 @@ package dao; import java.sql.*; +import java.util.List; +import java.util.Map; import error.GExcptSQL; import org.apache.tomcat.jdbc.pool.DataSource; @@ -9,6 +11,24 @@ import org.apache.tomcat.jdbc.pool.PoolProperties; public class DBManagement { + public static String[] userTables = { + "administrator", + "student", + "teacher" + }; + public static String[] graduationDesignTables = { + "graduation_design", + "graduation_design_finished_product", + "graduation_design_finished_product_mentor_score", + "graduation_design_finished_product_reviewer_score", + "graduation_design_information", + "graduation_design_opening_report", + "graduation_design_opening_report_opinion_record", + "graduation_design_reply", + "graduation_design_reply_opinion_record_score" + }; + + static final String driverClassName="org.mariadb.jdbc.Driver"; static final String url="jdbc:mariadb://localhost:3306/gdms"; static final String username="gdms"; @@ -42,6 +62,26 @@ public class DBManagement { return null; } + public static void delete(String table, Map limits) throws GExcptSQL { + Delete delete = new Delete(table, limits); + String sql = delete.getSQL(); + update(sql); + } + public static void insert(String table, Map vMap) throws GExcptSQL { + Insert insert = new Insert(table, vMap); + String sql = insert.getSQL(); + update(sql); + } + public static ResultSet select(List columns, String table, Map limits, int startRow, int endRow) throws Exception { + Select select = new Select(columns,table,limits,startRow,endRow); + String sql = select.getSQL(); + return query(sql); + } + public static void update(String table, Map vMap, Map limits) throws GExcptSQL { + Update update = new Update(table,vMap,limits); + String sql = update.getSQL(); + update(sql); + } public static ResultSet query(String sql) throws Exception { if(!ifInit) return null; ResultSet rs = null; diff --git a/src/dao/Delete.java b/src/dao/Delete.java new file mode 100644 index 0000000..c52666a --- /dev/null +++ b/src/dao/Delete.java @@ -0,0 +1,31 @@ +package dao; + +import java.util.Map; + +public class Delete extends SQLStmt { + private static final String fs = "DELETE "; + private Map limits; + + Delete(String table, Map limits) { + super(table); + this.setLimits(limits); + } + @Override + public String getSQL() { + return this.getFs()+this.getLs(); + } + private String getLs(){ + return dao.Utils.whereAnd(this.getLimits()); + } + public String getFs(){ + return fs+this.getTable()+" "; + } + + private Map getLimits() { + return limits; + } + + private void setLimits(Map limits) { + this.limits = limits; + } +} diff --git a/src/dao/Insert.java b/src/dao/Insert.java new file mode 100644 index 0000000..4135bd6 --- /dev/null +++ b/src/dao/Insert.java @@ -0,0 +1,43 @@ +package dao; + +import utils.Utils; + +import java.util.Map; + +public class Insert extends SQLStmt { + private static final String fs ="INSERT INTO "; + private Map vMap; + Insert(String table, Map vMap){ + super(table); + this.setVMap(vMap); + } + @Override + public String getSQL() { + return this.getFs()+this.getVs(); + } + + @Override + public String getFs() { + return fs+this.getTable()+" "; + } + private String getVs(){ + StringBuilder sql = new StringBuilder("("); + for(String key: this.getVMap().keySet()){ + sql.append(key).append(", "); + } + sql = new StringBuilder(Utils.cutTail(sql.toString(), 2) + ") "); + sql.append("VALUES (\'"); + for(String value: vMap.values()){ + sql.append(value).append("\', \'"); + } + sql = new StringBuilder(Utils.cutTail(sql.toString(), 3) + ")"); + return sql.toString(); + } + private Map getVMap() { + return vMap; + } + + private void setVMap(Map vMap) { + this.vMap = vMap; + } +} diff --git a/src/dao/SQLStmt.java b/src/dao/SQLStmt.java new file mode 100644 index 0000000..61f653f --- /dev/null +++ b/src/dao/SQLStmt.java @@ -0,0 +1,16 @@ +package dao; + +public abstract class SQLStmt { + private String table; + SQLStmt(String table) { + this.setTable(table); + } + public abstract String getSQL(); + public abstract String getFs(); + String getTable() { + return table; + } + public void setTable(String table) { + this.table = table; + } +} diff --git a/src/dao/Select.java b/src/dao/Select.java new file mode 100644 index 0000000..472cd12 --- /dev/null +++ b/src/dao/Select.java @@ -0,0 +1,62 @@ +package dao; + +import java.util.List; +import java.util.Map; + +public class Select extends SQLStmt { + private static final String fs ="SELECT "; + private Map limits; + private List columns; + private int startRow; + private int endRow; + public Select(List columns, String table, Map limits, int startRow, int endRow){ + super(table); + this.setColumns(columns); + this.setLimits(limits); + this.setStartRow(startRow); + this.setEndRow(endRow); + } + @Override + public String getSQL() { + return this.getFs()+this.getTs()+this.getLs(); + } + private String getLs(){ + String sql = dao.Utils.whereAnd(this.getLimits())+" "; + sql+="LIMIT "+this.getStartRow()+", "+this.getEndRow(); + return sql; + } + @Override + public String getFs() { + return fs+dao.Utils.linkColumn(this.getColumns())+" "; + } + private String getTs(){ + return "FROM "+this.getTable()+" "; + } + private Map getLimits() { + return limits; + } + public void setLimits(Map limits) { + this.limits = limits; + } + private List getColumns() { + return columns; + } + public void setColumns(List columns) { + this.columns = columns; + } + private int getStartRow() { + return startRow; + } + + private void setStartRow(int startRow) { + this.startRow = startRow; + } + + private int getEndRow() { + return endRow; + } + + private void setEndRow(int endRow) { + this.endRow = endRow; + } +} diff --git a/src/dao/Update.java b/src/dao/Update.java new file mode 100644 index 0000000..20f9f88 --- /dev/null +++ b/src/dao/Update.java @@ -0,0 +1,52 @@ +package dao; + +import java.util.Map; + +public class Update extends SQLStmt { + private static final String fs ="UPDATE "; + private Map limits; + private Map vMap; + + + Update(String table, Map vMap, Map limits) { + super(table); + this.setVMap(vMap); + this.setLimits(limits); + } + + @Override + public String getSQL() { + return this.getFs()+this.getVs()+this.getLs(); + } + + @Override + public String getFs() { + return fs+this.getTable()+" "; + } + private String getLs(){ + return dao.Utils.whereAnd(this.getLimits()); + } + private String getVs(){ + String sql = "SET "; + sql+=Utils.linkColumn(Utils.linkKeyValue(this.getVMap()))+" "; + return sql; + } + + + private Map getLimits() { + return limits; + } + + public void setLimits(Map limits) { + this.limits = limits; + } + public Map getVMap() { + return vMap; + } + + public void setVMap(Map vMap) { + this.vMap = vMap; + } + + +} diff --git a/src/dao/Utils.java b/src/dao/Utils.java index 8f22aa1..309bc7c 100644 --- a/src/dao/Utils.java +++ b/src/dao/Utils.java @@ -1,6 +1,33 @@ package dao; -public interface Utils { - +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +public interface Utils { + static String whereAnd(Map map){ + List list = linkKeyValue(map); + String sql = "WHERE "; + for(String s:list){ + sql+=s+" AND "; + } + sql = utils.Utils.cutTail(sql,5)+""; + return sql; + } + //with ", " + static String linkColumn(List list){ + String sql = ""; + for(String c:list){ + sql+=c+", "; + } + return utils.Utils.cutTail(sql,2); + } + //with " = " + static List linkKeyValue(Map map){ + List list = new ArrayList<>(); + for(Map.Entry entry:map.entrySet()){ + list.add(entry.getKey()+" = \'"+entry.getValue()+"\'"); + } + return list; + } } diff --git a/src/utils/Utils.java b/src/utils/Utils.java index a1c7c56..d439588 100644 --- a/src/utils/Utils.java +++ b/src/utils/Utils.java @@ -5,24 +5,26 @@ import java.util.List; import java.util.Map; public interface Utils { - public static Map userAttrNum =new HashMap<>() - + Map userAttrNum =new HashMap<>() { { - userAttrNum.put("administrator",5); - userAttrNum.put("student",7); - userAttrNum.put("teacher",8); + put("administrator",5); + put("student",7); + put("teacher",8); } }; - public static String toUpperFirstChar(String string) { + static String toUpperFirstChar(String string) { char[] charArray = string.toCharArray(); charArray[0] -= 32; return String.valueOf(charArray); } - public static List formatUserInfo(String userType, List userInfo){ + static List formatUserInfo(String userType, List userInfo){ for(int i=0;i