summaryrefslogtreecommitdiff
path: root/src/dao/SQLexecutor.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/dao/SQLexecutor.java')
-rw-r--r--src/dao/SQLexecutor.java80
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 @@
1package dao;
2
3import java.sql.Connection;
4import java.sql.PreparedStatement;
5import java.sql.ResultSet;
6import java.sql.SQLException;
7
8public 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}