summaryrefslogtreecommitdiff
path: root/src/dao
diff options
context:
space:
mode:
Diffstat (limited to 'src/dao')
-rw-r--r--src/dao/JDBC.java62
-rw-r--r--src/dao/ResultObject.java25
-rw-r--r--src/dao/SQLexecutor.java48
3 files changed, 71 insertions, 64 deletions
diff --git a/src/dao/JDBC.java b/src/dao/JDBC.java
index 714803e..324ff2d 100644
--- a/src/dao/JDBC.java
+++ b/src/dao/JDBC.java
@@ -5,9 +5,9 @@ import java.sql.DriverManager;
5import java.sql.SQLException; 5import java.sql.SQLException;
6 6
7/** 7/**
8 * connexion à la BDD avec JDBC 8 * connexion avec JDBC pour utilisation par la classe fille: SQLexecutor,
9 * tous les paramètres de connexion et les setters sont statiques 9 * les paramètres de connexion et les setters sont statiques
10 * le nom de la table sélectionnée est dans ModelCRUD 10 *
11 */ 11 */
12abstract public class JDBC 12abstract public class JDBC
13{ 13{
@@ -20,25 +20,31 @@ abstract public class JDBC
20 private static String host= "localhost"; 20 private static String host= "localhost";
21 private static String strUrl; 21 private static String strUrl;
22 22
23 /**
24 * retourne une instance de Connection avec JDBC
25 * @return instance de Connection
26 * @throws SQLException en cas d'erreur de connexion
27 * @throws ClassNotFoundException pour Class.forName()
28 */
23 protected Connection getConnection() throws SQLException, ClassNotFoundException 29 protected Connection getConnection() throws SQLException, ClassNotFoundException
24 { 30 {
25 Class.forName(strClassName); 31 Class.forName(strClassName);
26 return DriverManager.getConnection(strUrl, login, password); 32 return DriverManager.getConnection(strUrl, login, password);
27// try {
28// Class.forName(strClassName); // chargement du driver
29// return DriverManager.getConnection(strUrl, login, password);
30// }
31// catch(ClassNotFoundException e) {
32// System.err.println("Driver non chargé !");
33// e.printStackTrace();
34// }
35// catch(SQLException e) {
36// e.printStackTrace();
37// }
38// return null;
39 } 33 }
40 34
41 // setters 35 // setters
36 /**
37 * génère l'url utilisée par le driver,
38 * à n'exécuter que lorsque tous les paramètres ont été renseignés (en particulier dbname, login et password),
39 * certains: host, dbms, strClassName et port ont des valeurs par défaut pour un serveur mysql sur localhost
40 */
41 public static void setStrUrl() {
42 if(dbname != null && login != null && password != null) {
43 JDBC.strUrl = "jdbc:" + dbms + "://" + host + ":" + port + "/" + dbname;
44 }
45 else System.out.print("il manque des paramètres nécéssaires à la connexion au driver");
46 }
47
42 public static void setHost(String host) { 48 public static void setHost(String host) {
43 JDBC.host = host; 49 JDBC.host = host;
44 } 50 }
@@ -55,18 +61,25 @@ abstract public class JDBC
55 JDBC.port = "3306"; 61 JDBC.port = "3306";
56 } 62 }
57 } 63 }
58 private static void setStrUrl() {
59 JDBC.strUrl = "jdbc:" + dbms + "://" + host + ":" + port + "/" + dbname;
60 }
61 public static void setDbName(String dbName) { 64 public static void setDbName(String dbName) {
62 JDBC.dbname = dbName; 65 JDBC.dbname = dbName;
63 } 66 }
64 public static void setLogin(String login) { 67 public static void setLogin(String login) {
65 JDBC.login = login; 68 JDBC.login = login;
66 } 69 }
67 public static void setMotdepasse(String motdepasse) { 70 public static void setPassword(String motdepasse) {
68 JDBC.password = motdepasse; 71 JDBC.password = motdepasse;
69 } 72 }
73
74 /**
75 * donner tous les paramètres de connexion en une fois
76 * il est également possible de les donner un par un avec les setters en finissant pas JDBC.setStrUrl()
77 * @param host adresse du serveur
78 * @param dbms obtenir le nom du driver et le numéro du port à partir du nom du SGBD
79 * @param dbname de la base de données
80 * @param login nom d'utilisateur
81 * @param password mot de passe
82 */
70 public static void setInfos(String host, String dbms, String dbname, String login, String password) 83 public static void setInfos(String host, String dbms, String dbname, String login, String password)
71 { 84 {
72 JDBC.dbname = dbname; 85 JDBC.dbname = dbname;
@@ -76,15 +89,4 @@ abstract public class JDBC
76 setDBMS(dbms); 89 setDBMS(dbms);
77 JDBC.setStrUrl(); 90 JDBC.setStrUrl();
78 } 91 }
79
80// public void close()
81// {
82// try {
83// this.conn.close(); // libérer le slot (même principe que l'attaque DDOS)
84// this.conn = null; // pour pouvoir réinstancier avec d'autres paramètres
85// }
86// catch (SQLException e) {
87// e.printStackTrace();
88// }
89// }
90} 92}
diff --git a/src/dao/ResultObject.java b/src/dao/ResultObject.java
index e41af0b..1df9d88 100644
--- a/src/dao/ResultObject.java
+++ b/src/dao/ResultObject.java
@@ -5,12 +5,20 @@ import java.sql.ResultSetMetaData;
5import java.sql.SQLException; 5import java.sql.SQLException;
6import java.util.ArrayList; 6import java.util.ArrayList;
7import java.util.HashMap; 7import java.util.HashMap;
8import java.util.List;
9 8
9/**
10 * conteneur pour ResultSet dans le cas d'un SELECT,
11 * les valeurs des HashMap sont des "Object" pour gérer tous les types de données
12 */
10public class ResultObject 13public class ResultObject
11{ 14{
12 private final List<HashMap<String, Object>> data = new ArrayList<>(); 15 private final ArrayList<HashMap<String, Object>> data = new ArrayList<>();
13 16
17 /**
18 * copie du ResultSet dans une ArrayList composée d'HashMap
19 * @param rs instance de ResultSet
20 * @throws SQLException en cas d'erreur avec le ResultSet
21 */
14 public ResultObject(ResultSet rs) throws SQLException 22 public ResultObject(ResultSet rs) throws SQLException
15 { 23 {
16 ResultSetMetaData metaData = rs.getMetaData(); 24 ResultSetMetaData metaData = rs.getMetaData();
@@ -24,15 +32,14 @@ public class ResultObject
24 row.put(metaData.getColumnName(i), rs.getObject(i)); 32 row.put(metaData.getColumnName(i), rs.getObject(i));
25 } 33 }
26 data.add(row); 34 data.add(row);
27 } 35 }
28
29// rs.close();
30// rs.getStatement().close();
31// rs.getStatement().getConnection().close();
32
33 } 36 }
34 37
35 public List<HashMap<String, Object>> getData() 38 /**
39 * à utiliser dans la boucle permettant de parcourir la liste
40 * @return retourne la liste encapsulée
41 */
42 public ArrayList<HashMap<String, Object>> getData()
36 { 43 {
37 return data; 44 return data;
38 } 45 }
diff --git a/src/dao/SQLexecutor.java b/src/dao/SQLexecutor.java
index 8f7f130..430c1c0 100644
--- a/src/dao/SQLexecutor.java
+++ b/src/dao/SQLexecutor.java
@@ -5,13 +5,20 @@ import java.sql.PreparedStatement;
5import java.sql.ResultSet; 5import java.sql.ResultSet;
6import java.sql.SQLException; 6import java.sql.SQLException;
7 7
8/**
9 * exécuter des requêtes SQL:
10 * connexion avec JDBC => préparation de la requête => exécution
11 * => copie du ResultSet dans une ArrayList d'HashMap => fermeture de la connexion
12 */
8public class SQLexecutor extends JDBC 13public class SQLexecutor extends JDBC
9{ 14{
15 // constructeur par défaut
16
10 /** 17 /**
11 * Exécute une requête SQL et retourne le résultat si applicable. 18 * Exécute une requête SQL et retourne le résultat si applicable.
12 * @param sql requête avec des ? 19 * @param sql requête avec des ?
13 * @param params Object... permet d'ajouter autant de paramètres qu'on veut et ça fait un tableau 20 * @param params nombre libre de paramètres, "Object..." permet de créer un tableau à partir des paramètres
14 * @return Un ResultSet si la requête est un SELECT, sinon null 21 * @return ResultSet si la requête est un SELECT, null sinon
15 * @throws SQLException en cas d'erreur SQL 22 * @throws SQLException en cas d'erreur SQL
16 * @throws ClassNotFoundException pour DriverManager.getConnection 23 * @throws ClassNotFoundException pour DriverManager.getConnection
17 */ 24 */
@@ -24,26 +31,19 @@ public class SQLexecutor extends JDBC
24 try { 31 try {
25 connection = getConnection(); 32 connection = getConnection();
26 boolean isSelect = sql.trim().toLowerCase().startsWith("select"); 33 boolean isSelect = sql.trim().toLowerCase().startsWith("select");
27 34
35 statement = connection.prepareStatement(sql);
28 if (params.length > 0) 36 if (params.length > 0)
29 { 37 {
30 int option; 38// if(isSelect)
31 if(isSelect) 39// => ResultSet.TYPE_SCROLL_INSENSITIVE;
32 { 40// navigation possible dans le ResultSet: next(), previous(), absolute();
33 option = ResultSet.TYPE_SCROLL_INSENSITIVE; 41// ResultSet non modifiable en cas d'accès concurrent en mémoire
34 // navigation possible dans le ResultSet: next(), previous(), absolute(); 42// => PreparedStatement.NO_GENERATED_KEYS;
35 // ResultSet non modifiable en cas d'accès concurrent en mémoire 43// optimisation en ne retournant pas les clé générés lors d'un INSERT (RETURN_GENERATED_KEYS)
36 } 44// statement = connection.prepareStatement(sql, isSelect ? ResultSet.TYPE_SCROLL_INSENSITIVE : PreparedStatement.NO_GENERATED_KEYS);
37 else 45
38 {
39 option = PreparedStatement.NO_GENERATED_KEYS;
40 // optimisation en ne retournant pas les clé générés lors d'un INSERT (RETURN_GENERATED_KEYS)
41 }
42 statement = connection.prepareStatement(sql, option);
43 //isSelect ? ResultSet.TYPE_SCROLL_INSENSITIVE : PreparedStatement.NO_GENERATED_KEYS);
44 this.setParameters(statement, params); 46 this.setParameters(statement, params);
45 } else {
46 statement = connection.prepareStatement(sql);
47 } 47 }
48 48
49 if(isSelect) { 49 if(isSelect) {
@@ -51,17 +51,15 @@ public class SQLexecutor extends JDBC
51 ResultObject result = new ResultObject(resultSet); 51 ResultObject result = new ResultObject(resultSet);
52 resultSet.close(); 52 resultSet.close();
53 return result; 53 return result;
54 } else { 54 }
55 else {
55 statement.executeUpdate(); 56 statement.executeUpdate();
56 return null; 57 return null;
57 } 58 }
58 } finally { 59 }
60 finally {
59 statement.close(); 61 statement.close();
60 connection.close(); 62 connection.close();
61// if (resultSet == null) {
62// statement.close();
63// connection.close();
64// }
65 } 63 }
66 } 64 }
67 65