JAVA : Classe pour traiter les SELECT MySQL ?

Pouzy -  
Marco la baraque Messages postés 996 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je souhaite externaliser mes traitements SQL en JAVA parce que j'en ai beaucoup à faire. J'ai actuellement le code suivant pour me connecter à ma BDD :

	
					   Class.forName("com.mysql.jdbc.Driver");
				
					     Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/table","***","***");
					      Statement stmt = null;
					      ResultSet rs = null;
					     
					                stmt = conn.createStatement();
					            
					                rs = stmt.executeQuery("SELECT * FROM test");
					                
					                		while (rs.next()) {
					                			  String test = rs.getString("test");
					                			}
					                break;
					  

(J'ai enlevé les gestion d'exceptions & fermeture des connexions pour garder un truc lisible)
Je souhaite en fait externaliser tout ça, de manière à n'avoir qu'un :

rs = classe.connexionsql("SELECT test from...");


Et donc que mon rs soit un ResultSet que je puisse exploiter via rs.next();
J'ai réussi avec le INSERT sans problème car il ne renvoie rien, mais je bloque sur le ResultSet. Quelqu'un a une idée ?

Merci :)
A voir également:

4 réponses

Utilisateur anonyme
 
Salut!

Pourquoi n'utilises-tu pas Hibernate?

;-)
HackTrack
0
Pouzy
 
Coucou,

Comment ça dégueulasse ? En fait je veux simplement pouvoir exécuter plusieurs SELECT dans des classes différentes sans avoir à me retaper les ResultSet & co.
Et pour le problème : j'ai essayé avec la classe qui retournerait le RS, mais j'ai un beau "Can't do jesaispluquoi when ResultSet is already closed".

D'où mon appel à l'aide :)

Merci !
0
Marco la baraque Messages postés 996 Date d'inscription   Statut Contributeur Dernière intervention   329
 
Re,
Je dis que c'est pas top top car tu crées une classe qui fait le café, et qui t'autorise à faire n'importe quoi sans contrôle. En gros en l'utilisant tu peux exécuter n'importe quelle requête exécutable pas executeQuery donc niveau sécurité c'est pas ce qu'il y a de mieux. En plus elle n'est utilisable que de manière spécifique vu que tous tes paramètres de connexion sont intégrés au code.

Ceci dit, ça peut être pratique si ce n'est pas ton souci.

Pour répondre à ta question, c'est ce que je pensais : tu crées ta connexion, puis ton statement.
Tu exécutes ta requête et obtiens ton resultSet, mais celui-ci est détruit lorsque tu fermes ton statement. L'idée serait donc de copier son contenu dans une liste et de retourner une liste...

public static List<String> executeQuery(String request) {
...
 ResultSet rs = stmt.executeQuery(request);
 List<String> retour = new LinkedList<String>();
 while (rs.hasNext()) {
  retour.add( new String((String) rs.next()));
 }
 stmt.close();
 return retour;
}


Remarque : ça peut peut-être aussi marcher avec retour.add((String) rs.next()); mais je n'en suis pas sûr du tout.

Essaie ça et tiens nous au courant.

Concernant Hibernate, c'est pas forcément super facile au début, donc tu as raison de commencer comme tu fais, tu passeras à Hibernate plus tard (ceci dit Hibernate c'est vraiment méga balèze ;)

Cordialement,
0
Pouzy
 
Au fait, pour le Hibernate : je suis débutant en JAVA et j'ai fait quelques recherches dessus, je m'avoue un peu largué... :(
0
Marco la baraque Messages postés 996 Date d'inscription   Statut Contributeur Dernière intervention   329
 
Bonsoir,
Qu'est ce qui te bloque ?
Tu peux très bien créer une classe avec une méthode statique "executeQuery" qui prend un String en entrée et qui retourne le resultset.
Je ne vois pas où est le problème (je me demande toutefois si le resultset n'a pas la durée de vie de ton statement, ce qui peut poser problème pour le retourner, auquel cas il faudrait copier les données de ton resultset dans une liste... mais sûrement que non).

Après ce que tu veux faire est dégueulasse mais c'est pas le sujet.
-1