summaryrefslogtreecommitdiff
path: root/src/modele/dao/SQLexecutor.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/modele/dao/SQLexecutor.java')
-rw-r--r--src/modele/dao/SQLexecutor.java78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/modele/dao/SQLexecutor.java b/src/modele/dao/SQLexecutor.java
new file mode 100644
index 0000000..484f52e
--- /dev/null
+++ b/src/modele/dao/SQLexecutor.java
@@ -0,0 +1,78 @@
1package modele.dao;
2
3import java.sql.Connection;
4import java.sql.PreparedStatement;
5import java.sql.ResultSet;
6import java.sql.SQLException;
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 */
13public class SQLexecutor extends JDBC
14{
15 // constructeur par défaut
16
17 /**
18 * Exécute une requête SQL et retourne le résultat si applicable.
19 * @param sql requête avec des ?
20 * @param params nombre libre de paramètres, "Object..." permet de créer un tableau à partir des paramètres
21 * @return ResultSet si la requête est un SELECT, null sinon
22 * @throws SQLException en cas d'erreur SQL
23 * @throws ClassNotFoundException pour DriverManager.getConnection
24 */
25 public ResultObject executeQuery(String sql, Object... params) throws SQLException, ClassNotFoundException
26 {
27 Connection connection = null;
28 PreparedStatement statement = null;
29 ResultSet resultSet = null;
30
31 try {
32 connection = getConnection();
33 boolean isSelect = sql.trim().toLowerCase().startsWith("select");
34
35 statement = connection.prepareStatement(sql);
36 if (params.length > 0)
37 {
38// if(isSelect)
39// => ResultSet.TYPE_SCROLL_INSENSITIVE;
40// navigation possible dans le ResultSet: next(), previous(), absolute();
41// ResultSet non modifiable en cas d'accès concurrent en mémoire
42// => PreparedStatement.NO_GENERATED_KEYS;
43// optimisation en ne retournant pas les clé générés lors d'un INSERT (RETURN_GENERATED_KEYS)
44// statement = connection.prepareStatement(sql, isSelect ? ResultSet.TYPE_SCROLL_INSENSITIVE : PreparedStatement.NO_GENERATED_KEYS);
45
46 this.setParameters(statement, params);
47 }
48
49 if(isSelect) {
50 resultSet = statement.executeQuery();
51 ResultObject result = new ResultObject(resultSet);
52 resultSet.close();
53 return result;
54 }
55 else {
56 statement.executeUpdate();
57 return null;
58 }
59 }
60 finally {
61 statement.close();
62 connection.close();
63 }
64 }
65
66 /**
67 * Affecte les paramètres aux requêtes préparées.
68 * @param statement
69 * @param params Object... permet d'ajouter autant de paramètres qu'on veut et ça fait un tableau
70 * @throws SQLException en cas d'erreur SQL
71 */
72 private void setParameters(PreparedStatement statement, Object... params) throws SQLException
73 {
74 for (int i = 0; i < params.length; i++) {
75 statement.setObject(i + 1, params[i]);
76 }
77 }
78}