diff options
Diffstat (limited to 'src/modele/dao/SQLexecutor.java')
-rw-r--r-- | src/modele/dao/SQLexecutor.java | 78 |
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 @@ | |||
1 | package modele.dao; | ||
2 | |||
3 | import java.sql.Connection; | ||
4 | import java.sql.PreparedStatement; | ||
5 | import java.sql.ResultSet; | ||
6 | import 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 | */ | ||
13 | public 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 | } | ||