private static void createTables() { try { System.out.println("1"); Class.forName("org.h2.Driver"); Connection conn = DriverManager.getConnection( GlobalVariables.path, GlobalVariables.username, GlobalVariables.password); String queryAdmin = "CREATE TABLE IF NOT EXISTS ADMIN(ADMINID INT PRIMARY KEY AUTO_INCREMENT, USERNAME VARCHAR(255) UNIQUE , PASSWORD VARCHAR(255))"; String queryConsumer = "CREATE TABLE IF NOT EXISTS CONSUMER(CONSUMERID INT PRIMARY KEY AUTO_INCREMENT,USERNAME VARCHAR(255) UNIQUE , PASSWORD VARCHAR(255) )"; String queryProducer = "CREATE TABLE IF NOT EXISTS PRODUCER(PRODUCERID INT PRIMARY KEY AUTO_INCREMENT,USERNAME VARCHAR(255) UNIQUE , PASSWORD VARCHAR(255) )"; String queryInventory = "CREATE TABLE IF NOT EXISTS INVENTORY(INVENTORYIDID INT PRIMARY KEY AUTO_INCREMENT, PRODUCTIDID INT,IQUANTITY INT, PRODUCERID INT)"; String queryOrder = "CREATE TABLE IF NOT EXISTS ORDERS(ORDERID INT PRIMARY KEY AUTO_INCREMENT, QUANTITY INT, ORDERDATE VARCHAR(255), ORDERSTATUS VARCHAR(255), CONSUMERID INT)"; Statement stmt = conn.createStatement(); stmt.execute(queryAdmin); stmt.execute(queryConsumer); stmt.execute(queryProducer); stmt.execute(queryInventory); stmt.execute(queryOrder); String alterInventory2 = "ALTER TABLE INVENTORY ADD FOREIGN KEY(PRODUCERID) REFERENCES PRODUCER(PRODUCERID) ON DELETE CASCADE"; String alterOrder = "ALTER TABLE ORDERS ADD FOREIGN KEY(CONSUMERID) REFERENCES CONSUMER(CONSUMERID) ON DELETE CASCADE"; stmt.equals(alterInventory2); stmt.equals(alterOrder); } catch (Exception e) { System.out.println(e); } }
/** {@inheritDoc} */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // performance : on évite method.invoke pour equals & hashCode final String methodName = method.getName(); if (isEqualsMethod(methodName, args)) { return statement.equals(args[0]); } else if (isHashCodeMethod(methodName, args)) { return statement.hashCode(); } else if (methodName.startsWith("execute")) { if (isFirstArgAString(args)) { // la méthode est du type executeQuery(String), executeUpdate(String), // executeUpdate(String, ...) ou execute(String sql), // alors la requête sql est le premier argument (et pas query) requestName = (String) args[0]; } // si on n'a pas trouvé la requête, on prend "null" requestName = String.valueOf(requestName); return doExecute(requestName, statement, method, args); } else if ("addBatch".equals(methodName) && isFirstArgAString(args)) { // Bien que déconseillée la méthode est addBatch(String), // la requête sql est alors le premier argument // (elle sera utilisée lors de l'appel à executeBatch()) // Rq : on ne conserve que la dernière requête de addBatch. // Rq : si addBatch(String) est appelée, puis que executeUpdate(String) // la requête du batch est correctement ignorée ci-dessus. // Rq : si connection.prepareStatement(String).addBatch(String) puis executeUpdate() // sont appelées (et pas executeBatch()) alors la requête conservée est // faussement celle du batch mais l'application cloche grave. requestName = (String) args[0]; } // ce n'est pas une méthode executeXxx du Statement return method.invoke(statement, args); }