Browse Source

Utilisation de fichier SQL

Arthur Brandao 5 years ago
parent
commit
2cd966ffe7

+ 3 - 9
src/db/Database.java

@@ -60,14 +60,11 @@ public class Database {
 		}
 		LOGGER.info("Creating table");
 		DatabaseManager md = getDatabaseManager();
-		md.create().forEach((table, sql) -> {
-			LOGGER.info("Creating table " + table);
-			execute(sql);
-		});
+		md.create().forEach(sql -> execute(sql));
 		List<String> content = md.content();
 		if(content != null) {
 			LOGGER.info("Add content");
-			content.forEach(req -> execute(req));
+			content.forEach(sql -> execute(sql));
 		}
 	}
 	
@@ -77,10 +74,7 @@ public class Database {
 		}
 		LOGGER.info("Dropping table");
 		DatabaseManager md = getDatabaseManager();
-		md.drop().forEach((table, sql) -> {
-			LOGGER.info("Dropping table " + table);
-			execute(sql);
-		});
+		md.drop().forEach(sql -> execute(sql));
 	}
 	
 	public static boolean query(String sql) {

+ 35 - 3
src/db/DatabaseManager.java

@@ -1,18 +1,50 @@
 package db;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
-import java.util.Map;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
 
 public abstract class DatabaseManager {
 	
+	private static final Logger LOGGER = Logger.getLogger(DatabaseManager.class.getName());
+	
 	protected DatabaseManager() {
 		// Constructeur privé pour singelton
 	}
 	
-	public abstract Map<String, String> create();
+	public abstract List<String> create();
 	
-	public abstract Map<String, String> drop();
+	public abstract List<String> drop();
 	
 	public abstract List<String> content();
+	
+	public List<String> readSQLFile(String sqlFile) {
+		return readSQLFile(new File(sqlFile));
+	}
+	
+	public List<String> readSQLFile(File sqlFile) {
+		if (! (sqlFile.exists() && sqlFile.canRead())) {
+			LOGGER.warning("Unable to find SQL file (" + sqlFile.getPath() + ")");
+			return new ArrayList<>();
+		}
+		// Lecture du fichier
+		try {
+			FileInputStream fis = new FileInputStream(sqlFile);
+			byte[] data = new byte[(int) sqlFile.length()];
+			fis.read(data);
+			fis.close();
+			String sql = new String(data, "UTF-8");
+			return Arrays.asList(sql.split(";\n")).stream().filter(elt -> !elt.isBlank()).collect(Collectors.toList());
+		} catch (IOException e) {
+			LOGGER.severe("Unable to read SQL File: " + e.getMessage());
+			return new ArrayList<>();
+		}
+		
+	}
 
 }

+ 7 - 18
src/microfolie/persistance/MicrofolieDatabase.java

@@ -1,25 +1,14 @@
 package microfolie.persistance;
 
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
 import java.util.List;
-import java.util.Map;
 
 import db.DatabaseManager;
 
 public class MicrofolieDatabase extends DatabaseManager {
 	
 	private static MicrofolieDatabase instance;
-	private final static Map<String, String> create = new LinkedHashMap<>();
-	private final static Map<String, String> drop = new LinkedHashMap<>();
-	private final static List<String> mock = new ArrayList<>();
-	static {
-		iniCreate();
-		iniDrop();
-		iniMock();
-	}
 
-	private static void iniCreate() {
+	/*private static void iniCreate() {
 		create.put("Espace", "CREATE TABLE Espace ("
 				+ "ID BIGINT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY,"
 				+ "LIBELLE VARCHAR(250) NOT NULL,"
@@ -92,21 +81,21 @@ public class MicrofolieDatabase extends DatabaseManager {
 		mock.add("Insert into Usager(NOM, PRENOM, DATEDENAISSANCE, EMAIL, TELEPHONE, CONTACTURGENCE, CODE, SCOLAIRE, DESCRIPTION, VILLE) Values('Tatsuya', 'Shiro', '1992-03-01', 'shiro.tetsuya@hotmail.fr', '0782751703', 'Nop', '1992', FALSE, 'Desc', 3)");
 		mock.add("Insert into Usager(NOM, PRENOM, DATEDENAISSANCE, EMAIL, TELEPHONE, CONTACTURGENCE, CODE, SCOLAIRE, DESCRIPTION, VILLE, ECOLE) Values('Perrin', 'Jean', '1870-09-30', 'jean_perrin@univ-artois.fr', '0000000011', 'Nop', 'jPUa', TRUE, 'Desc', 3, 2)");
 		mock.add("Insert into Usager(NOM, PRENOM, DATEDENAISSANCE, EMAIL, TELEPHONE, CONTACTURGENCE, CODE, SCOLAIRE, DESCRIPTION, VILLE, ECOLE) Values('Mikoto', 'Misaka', '2004-11-08', 'mmikoto@esper.co.jp', '1100000000', 'Nop', 'yolo', TRUE, 'Desc', 1, 2)");
-	}
+	}*/
 
 	@Override
-	public Map<String, String> create() {
-		return create;
+	public List<String> create() {
+		return readSQLFile("./sql/create.sql");
 	}
 
 	@Override
-	public Map<String, String> drop() {
-		return drop;
+	public List<String> drop() {
+		return readSQLFile("./sql/drop.sql");
 	}
 
 	@Override
 	public List<String> content() {
-		return mock;
+		return readSQLFile("./sql/insert.sql");
 	}
 	
 	public static MicrofolieDatabase getInstance() {