· 6 years ago · Nov 28, 2019, 01:45 PM
1
2package eg.edu.alexu.csd.oop.db.cs39;
3
4import java.io.BufferedReader;
5import java.io.BufferedWriter;
6import java.io.FileReader;
7import java.io.FileWriter;
8import java.io.IOException;
9import java.sql.SQLException;
10import java.util.HashMap;
11import java.util.Map;
12import java.util.Vector;
13
14public class IDataBase implements Database {
15
16 Parser parser = new Parser();
17 Partitions p = new Partitions();
18 // Map of all created databases
19 Map<String, DB> m = new HashMap<String, DB>();
20 DB lastDB;
21 Command DBcommandCreate;
22 Command DBcommandDrop;
23 Command DropTable;
24 Command CreateTable;
25 Select selecTable;
26 Insert insertTable;
27 Update updateTable;
28 String querySmall;
29 Delete deleteTable;
30 String LastDBpath;
31
32 public void QueryManagement(String query) throws SQLException {
33 // create db
34 if (parser.checkInput(query) == 2) {
35 // drop-if-exist should be handled
36 p.CreateDatabase(query);
37 LastDBpath = this.createDatabase(p.getDatabasename(), false);
38
39 } else if (parser.checkInput(query) == 3) {
40 this.executeStructureQuery(query);
41 }
42 // create table,drop table,called internally when create db , drop db
43 else if (parser.checkInput(query) == 4 || parser.checkInput(query) == 8) {
44
45 this.executeStructureQuery(query);
46 }
47 // update method
48 else if (parser.checkInput(query) == 5 || parser.checkInput(query) == 6 || parser.checkInput(query) == 7|| parser.checkInput(query) == 11||parser.checkInput(query)==12) {
49
50 this.executeUpdateQuery(query);
51 }
52 // select
53 else if (parser.checkInput(query) == 9||parser.checkInput(query) == 1||parser.checkInput(query)==10) {
54 this.executeQuery(query);
55 } else {
56
57 }
58
59 }
60
61 @Override
62 public String createDatabase(String databaseName, boolean dropIfExists) {
63
64 if (m.containsKey(databaseName) == false) {
65
66 DBcommandCreate = new CreateDB(databaseName.toUpperCase());
67 try {
68 executeStructureQuery("createdatabase");
69 } catch (SQLException e) {
70 e.printStackTrace();
71 }
72 return DBcommandCreate.getpathofDB();
73 } else if (m.containsKey(databaseName.toUpperCase()) == true && dropIfExists) {
74 DBcommandDrop = new DropDB(databaseName.toUpperCase(), m);
75 try {
76 executeStructureQuery("dropdatabase");
77 } catch (SQLException e) {
78 e.printStackTrace();
79 }
80 DBcommandCreate = new CreateDB(databaseName.toUpperCase());
81 try {
82 executeStructureQuery("createdatabase");
83 } catch (SQLException e) {
84 e.printStackTrace();
85 }
86 System.out.println(DBcommandCreate.getpathofDB());
87 return DBcommandCreate.getpathofDB();
88 } else // It exists and it is not required to drop it
89 {
90 return m.get(databaseName.toUpperCase()).getAbsolutePath();
91 }
92
93 }
94
95 @Override
96 public boolean executeStructureQuery(String query) throws SQLException {
97
98 querySmall = query.toLowerCase();
99
100 if (query == "createdatabase") {
101 DBcommandCreate.execute();
102 m.put(DBcommandCreate.getnameofDB().toUpperCase(), DBcommandCreate.getDB());
103 lastDB = DBcommandCreate.getDB();
104 return true;
105 } else if (query == "dropdatabase") {
106 DBcommandDrop.execute();
107 m.remove(DBcommandDrop.getnameofDB().toUpperCase());
108
109 return true;
110 } else if (querySmall.contains("drop") && querySmall.contains("database")) {
111 p.DropDatabase(query);
112 System.out.println(p.getDropDataBaseName()+" zx");
113 DBcommandDrop = new DropDB(p.getDropDataBaseName().toUpperCase(), m);
114 DBcommandDrop.execute();
115 m.remove(p.getDropDataBaseName().toUpperCase());
116
117
118
119 return true;
120 } else if (querySmall.contains("create") && querySmall.contains("table")) {
121 System.out.println("d5l hna");
122 Boolean tableExist = false ;
123 p.CreateTable(query);
124 if(parser.checkInput(query)==0) {
125 throw new SQLException("sdfsdf");
126 }
127 for(int i = 0 ; i < lastDB.Tables.size() ; i++)
128 {
129 if( p.getTablename().compareTo(lastDB.Tables.get(i).getTable_Name()) == 0 )
130 {
131 tableExist = true;
132 }
133 }
134 if(tableExist)
135 {
136 return false;
137 }
138 else
139 {System.out.println("a7a");
140 CreateTable = new CreateTable(p.getTablename(), p.getcolumns(), p.gettypes(), lastDB.getDatabaseName(),lastDB);
141 CreateTable.execute();
142 return true;
143 }
144 } else if (querySmall.contains("drop") && querySmall.contains("table")) {
145 // i will call class partitions with string query ..to get table name.
146 p.DropTable(query);
147 DropTable = new DropTable(p.getTablename(), lastDB);
148 DropTable.execute();
149
150 return true;
151 } else {
152 // no query is right ...
153 return false;
154 }
155
156 }
157
158 public Vector<String> getNames(String query) throws SQLException {
159
160 selecTable = new Select(query, lastDB, 0, null, query);
161 try {
162 return selecTable.getNames();
163 } catch (Exception e) {
164 e.printStackTrace();
165 return null; // should be handled
166 }
167 }
168
169 @Override
170 public Object[][] executeQuery(String query) throws SQLException {
171 if (parser.checkInput(query) == 1) {
172 p.SelectTable(query);
173 selecTable = new Select(p.getTablename(), lastDB, 0, null, query);
174 try {
175 return selecTable.execute();
176 } catch (Exception e) {
177 e.printStackTrace();
178 return null; // should be handled
179 }
180 }
181
182 else if (parser.checkInput(query) == 10) {
183 p.selecttwocolumnscondition(query);
184 selecTable = new Select(p.getTablename(),lastDB,p.getOperator(),p.getselectconditioncloumn1(),p.getselectconditioncloumn2(),p.getselectconditionvalue());
185 try {
186 return selecTable.executeColumn();
187 } catch (Exception e) {
188 e.printStackTrace();
189 return null; // should be handled
190 }
191 }
192 else {
193 p.Select(query);
194 selecTable = new Select(p.getTablename(), lastDB, p.getOperator(), p.getSelectcolumn(), p.getSelectvalue());
195 try {
196 return selecTable.execute();
197 } catch (Exception e) {
198 e.printStackTrace();
199 return null; // should be handled
200 }
201 }
202 }
203
204 @Override
205 public int executeUpdateQuery(String query) throws java.sql.SQLException {
206
207 // insert //update //delete
208 querySmall = query.toLowerCase();
209 if (querySmall.contains("insert")) {
210 p.parent=lastDB;
211 p.Insert(query);
212 insertTable = new Insert(p.getTablename() , lastDB, p.getvalues());
213 try {
214
215 return insertTable.execute();
216
217 } catch (Exception e) {
218 e.printStackTrace();
219
220 return 0;
221 }
222
223 } else if (querySmall.contains("update")&&querySmall.contains("where")) {
224 p.Update(query);
225 updateTable = new Update(p.getTablename(), lastDB, p.getOperator(), p.getUpdatevalue2(),
226 p.getUpdatecolumn2(), p.getUpdatecolumn1(), p.getUpdatevalue1());
227 System.out.println(p.getOperator());
228 System.out.println(""+p.getUpdatevalue2()+"a7a"+p.getUpdatecolumn2()+"a7a"+ p.getUpdatecolumn1()+ "a7a"+p.getUpdatevalue1());
229 try {
230 return updateTable.execute();
231 } catch (Exception e) {
232 return 0;
233 }
234 } else if(querySmall.contains("update")) {
235 p.Updatecolumns(query);
236 System.out.println("d5al hna fel update");
237 updateTable = new Update(p.getTablename(),lastDB,p.getcolumns(),p.getvalues());
238 try {
239 return updateTable.execute();
240 } catch (Exception e) {
241 // TODO Auto-generated catch block
242 System.out.println("asdasdasd");
243 e.printStackTrace();
244 }
245 }
246
247 else if (querySmall.contains("delete")) {
248 if(parser.checkInput(query)==5) {
249 p.Delete(query);
250 System.out.println(p.getDeletevalue()+p.getDeletecolumn());
251 deleteTable = new Delete(p.getTablename(), lastDB, p.getDeletevalue(), p.getDeletecolumn());
252 try {
253 return deleteTable.execute();
254 } catch (Exception e) {
255 e.printStackTrace();
256 return 0;
257 }
258 }else if (parser.checkInput(query)==11) {
259 p.DeleteAll(query);
260// System.out.println(p.getDeletevalue()+p.getDeletecolumn());
261 deleteTable = new Delete(p.getTablename(), lastDB,null,null);
262 System.out.println(p.getTablename()+"deleteall");
263 try {
264 return deleteTable.execute();
265 } catch (Exception e) {
266 e.printStackTrace();
267 return 0;
268 }
269 }
270
271
272
273
274
275 } else {
276 return 0;
277 }
278 return 0;
279 }
280 public void save() throws Exception
281 {
282 savedatabasenames();
283 for (Map.Entry<String, DB> entry : m.entrySet()) {
284 entry.getValue().SaveDataBase();
285 }
286 }
287 public void savedatabasenames() throws Exception
288 {
289 BufferedWriter bw = new BufferedWriter(new FileWriter(".\\DatabaseNames.txt"));
290 for (Map.Entry<String, DB> entry : m.entrySet()) {
291 bw.write(entry.getValue().getDatabaseName());
292 bw.newLine();
293 }
294 bw.close();
295 }
296 public void load() throws IOException
297 {
298 BufferedReader br = new BufferedReader(new FileReader(".\\DatabaseNames.txt"));
299 String databaseaname;
300 while ( (databaseaname = br.readLine()) !=null)
301 {
302 DB loaded = new DB().LoadDataBase(databaseaname);
303 m.put(databaseaname, loaded);
304 }
305 br.close();
306 }
307}