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