From 30c38f78018c160fdeb44175e4ef97f0c2868b37 Mon Sep 17 00:00:00 2001 From: polo Date: Sat, 15 Feb 2025 15:25:40 +0100 Subject: release candidate 3 --- src/modele/dao/SQLexecutor.java | 78 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/modele/dao/SQLexecutor.java (limited to 'src/modele/dao/SQLexecutor.java') 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 @@ +package modele.dao; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * exécuter des requêtes SQL: + * connexion avec JDBC => préparation de la requête => exécution + * => copie du ResultSet dans une ArrayList d'HashMap => fermeture de la connexion + */ +public class SQLexecutor extends JDBC +{ + // constructeur par défaut + + /** + * Exécute une requête SQL et retourne le résultat si applicable. + * @param sql requête avec des ? + * @param params nombre libre de paramètres, "Object..." permet de créer un tableau à partir des paramètres + * @return ResultSet si la requête est un SELECT, null sinon + * @throws SQLException en cas d'erreur SQL + * @throws ClassNotFoundException pour DriverManager.getConnection + */ + public ResultObject executeQuery(String sql, Object... params) throws SQLException, ClassNotFoundException + { + Connection connection = null; + PreparedStatement statement = null; + ResultSet resultSet = null; + + try { + connection = getConnection(); + boolean isSelect = sql.trim().toLowerCase().startsWith("select"); + + statement = connection.prepareStatement(sql); + if (params.length > 0) + { +// if(isSelect) +// => ResultSet.TYPE_SCROLL_INSENSITIVE; +// navigation possible dans le ResultSet: next(), previous(), absolute(); +// ResultSet non modifiable en cas d'accès concurrent en mémoire +// => PreparedStatement.NO_GENERATED_KEYS; +// optimisation en ne retournant pas les clé générés lors d'un INSERT (RETURN_GENERATED_KEYS) +// statement = connection.prepareStatement(sql, isSelect ? ResultSet.TYPE_SCROLL_INSENSITIVE : PreparedStatement.NO_GENERATED_KEYS); + + this.setParameters(statement, params); + } + + if(isSelect) { + resultSet = statement.executeQuery(); + ResultObject result = new ResultObject(resultSet); + resultSet.close(); + return result; + } + else { + statement.executeUpdate(); + return null; + } + } + finally { + statement.close(); + connection.close(); + } + } + + /** + * Affecte les paramètres aux requêtes préparées. + * @param statement + * @param params Object... permet d'ajouter autant de paramètres qu'on veut et ça fait un tableau + * @throws SQLException en cas d'erreur SQL + */ + private void setParameters(PreparedStatement statement, Object... params) throws SQLException + { + for (int i = 0; i < params.length; i++) { + statement.setObject(i + 1, params[i]); + } + } +} -- cgit v1.2.3