Browse Source

Creation class gestion DB

Arthur Brandao 5 years ago
parent
commit
de38ef39c3
4 changed files with 212 additions and 1 deletions
  1. 5 1
      .classpath
  2. 100 0
      src/db/Database.java
  3. 60 0
      src/db/ManageTable.java
  4. 47 0
      src/servlets/TestDb.java

+ 5 - 1
.classpath

@@ -8,6 +8,10 @@
 	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
 	<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+		<attributes>
+			<attribute name="module" value="true"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="output" path="build/classes"/>
 </classpath>

+ 100 - 0
src/db/Database.java

@@ -0,0 +1,100 @@
+package db;
+
+import java.sql.Statement;
+import java.util.Optional;
+import java.util.logging.Logger;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+public class Database {
+	
+	private static final Logger LOGGER = Logger.getLogger(Database.class.getName());
+	private static Connection db;
+	
+	static {
+		ini();
+		unset();
+		setup();
+	}
+	
+	public static void ini() {
+		try{
+		    Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
+		} catch(ClassNotFoundException e){
+		    LOGGER.warning("Unable to find Derby driver");
+		    throw new IllegalStateException("Unable to connect to the database", e);
+		}
+		try {
+			db = DriverManager.getConnection("jdbc:derby:microfolie;create=true");
+		} catch (SQLException e) {
+			LOGGER.warning(e.getMessage());
+			throw new IllegalStateException("Unable to connect to the database", e);
+		}
+	}
+	
+	public static void close() {
+		if(db != null) {
+			try {
+				db.close();
+				db = null;
+			} catch (SQLException e) {
+				LOGGER.warning(e.getMessage());
+				throw new IllegalStateException("Unable to close database connection", e);
+			}	
+		}
+	}
+	
+	public static void setup() {
+		if(isSet()) {
+			return;
+		}
+		LOGGER.info("Creating table");
+		ManageTable.create.forEach((table, sql) -> {
+			LOGGER.info("Creating table " + table);
+			execute(sql);
+		});
+	}
+	
+	public static void unset() {
+		if(!isSet()) {
+			return;
+		}
+		LOGGER.info("Dropping table");
+		ManageTable.drop.forEach((table, sql) -> {
+			LOGGER.info("Dropping table " + table);
+			execute(sql);
+		});
+	}
+	
+	public static Optional<ResultSet> query(String sql) {
+		try(Statement st = db.createStatement()) {
+			ResultSet result = st.executeQuery(sql);
+			return Optional.of(result);
+		} catch (SQLException e) {
+			LOGGER.warning(e.getMessage());
+			return Optional.empty();
+		}
+	}
+	
+	public static boolean execute(String sql) {
+		try(Statement st = db.createStatement()) {
+			int result = st.executeUpdate(sql);
+			return result == 1;
+		} catch (SQLException e) {
+			LOGGER.warning(e.getMessage());
+			return false;
+		}
+	}
+	
+	public static boolean isSet() {
+		return query("Select * From Espace").isPresent();
+	}
+	
+	public static Connection getDb() {
+		return db;
+	}
+
+}

+ 60 - 0
src/db/ManageTable.java

@@ -0,0 +1,60 @@
+package db;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+public class ManageTable {
+	
+	public final static Map<String, String> create = new LinkedHashMap<>();
+	public final static Map<String, String> drop = new LinkedHashMap<>();	
+	static {
+		iniCreate();
+		iniDrop();
+	}
+	
+	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)");
+		create.put("Ville", "CREATE TABLE Ville ("
+				+ "ID BIGINT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY,"
+				+ "LIBELLE VARCHAR(250) NOT NULL,"
+				+ "CODEPOSTAL VARCHAR(5))");
+		create.put("Niveau", "CREATE TABLE Niveau ("
+				+ "ID BIGINT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY,"
+				+ "LIBELLE VARCHAR(250) NOT NULL)");
+		create.put("Ecole", "CREATE TABLE Ecole ("
+				+ "ID BIGINT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY,"
+				+ "LIBELLE VARCHAR(250) NOT NULL,"
+				+ "VILLE BIGINT REFERENCES Ville(ID),"
+				+ "NIVEAU BIGINT REFERENCES Niveau(ID))");
+		create.put("Usager", "CREATE TABLE Usager ("
+				+ "ID BIGINT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY,"
+				+ "NOM VARCHAR(250) NOT NULL,"
+				+ "PRENOM VARCHAR(250) NOT NULL,"
+				+ "DATEDENAISSANCE DATE NOT NULL,"
+				+ "EMAIL VARCHAR(250) NOT NULL,"
+				+ "TELEPHONE VARCHAR(12) NOT NULL,"
+				+ "CONTACTURGENCE VARCHAR(250) NOT NULL,"
+				+ "CODE VARCHAR(4) NOT NULL,"
+				+ "SCOLAIRE BOOLEAN NOT NULL,"
+				+ "DESCRIPTION VARCHAR(250) NOT NULL,"
+				+ "VILLE BIGINT REFERENCES Ville(ID),"
+				+ "ECOLE BIGINT REFERENCES Ecole(ID))");
+		create.put("Frequentation", "CREATE TABLE Frequentation ("
+				+ "ESPACE BIGINT REFERENCES Espace(ID),"
+				+ "USAGER BIGINT REFERENCES Usager(ID),"
+				+ "DATE DATE NOT NULL,"
+				+ "PRIMARY KEY(ESPACE, USAGER))");
+	}
+	
+	private static void iniDrop() {
+		drop.put("Frequentation", "DROP TABLE Frequentation");
+		drop.put("Usager", "DROP TABLE Usager");
+		drop.put("Ecole", "DROP TABLE Ecole");
+		drop.put("Niveau", "DROP TABLE Niveau");
+		drop.put("Ville", "DROP TABLE Ville");
+		drop.put("Espace", "DROP TABLE Espace");
+	}
+
+}

+ 47 - 0
src/servlets/TestDb.java

@@ -0,0 +1,47 @@
+package servlets;
+
+import java.io.IOException;
+import java.sql.ResultSet;
+import java.util.Optional;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import db.Database;
+
+/**
+ * Servlet implementation class TestDb
+ */
+@WebServlet("/TestDb")
+public class TestDb extends HttpServlet {
+	private static final long serialVersionUID = 1L;
+       
+    /**
+     * @see HttpServlet#HttpServlet()
+     */
+    public TestDb() {
+        super();
+        // TODO Auto-generated constructor stub
+    }
+
+	/**
+	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
+	 */
+	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+		Optional<ResultSet> result = Database.query("Select * From lol");
+		System.out.println(result.isEmpty());
+		response.getWriter().append("Served at: ").append(request.getContextPath());
+	}
+
+	/**
+	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
+	 */
+	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+		// TODO Auto-generated method stub
+		doGet(request, response);
+	}
+
+}