Problème Site en Java lié avec BDD (MySQL Xamppp + Eclipse)
Fermé
Utilisateur anonyme
-
Modifié le 24 nov. 2020 à 11:26
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 24 nov. 2020 à 17:58
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 24 nov. 2020 à 17:58
A voir également:
- Problème Site en Java lié avec BDD (MySQL Xamppp + Eclipse)
- Site de telechargement - Accueil - Outils
- Waptrick java football - Télécharger - Jeux vidéo
- Eclipse java download - Télécharger - Langages
- Jeux java itel football - Télécharger - Jeux vidéo
- Site comme coco - Accueil - Réseaux sociaux
5 réponses
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
24 nov. 2020 à 11:25
24 nov. 2020 à 11:25
Bonjour,
"Or, rien ne s'affiche dans ma console, uniquement ceci. "
Et c'est quoi ceci ?
"Or, rien ne s'affiche dans ma console, uniquement ceci. "
Et c'est quoi ceci ?
Utilisateur anonyme
24 nov. 2020 à 13:06
24 nov. 2020 à 13:06
Comment puis-je corrige tout cela ? Comme c'est que le code du prof et qu'il ne nous a pas tout expliqué, j'avoue m'y perdre queqlue peu ... et ne comprends pas encore la notion du try catch ...
Merci.
Merci.
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
24 nov. 2020 à 13:20
24 nov. 2020 à 13:20
Et bien le code du prof est très mal fait...
Le plus simple pour l'instant c'est de modifier tous les catch pour remplacer les System.out.println par un throw
Exemple :
Devient :
Remarque : surtout ne pas oublier le
Le plus simple pour l'instant c'est de modifier tous les catch pour remplacer les System.out.println par un throw
Exemple :
try { //Vérifier la présence du pilote Class.forName("com.mysql.jdbc.Driver"); } catch(ClassNotFoundException exp) { System.out.println("Le pilote JDBC n'existe pas"); }
Devient :
try { //Vérifier la présence du pilote Class.forName("com.mysql.jdbc.Driver"); } catch(Exception e) { throw new IllegalStateException("Le pilote JDBC n'existe pas", e); }
Remarque : surtout ne pas oublier le
, een second paramètre, c'est ce qui permet de conserver la véritable cause de l'erreur, sinon tu ne pourras jamais savoir d'où vient exactement le problème.
Utilisateur anonyme
Modifié le 24 nov. 2020 à 16:03
Modifié le 24 nov. 2020 à 16:03
Comme ceci ?
package modele; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Bdd { private String serveur, bdd, user, mdp ; private Connection maConnexion ; public Bdd(String serveur, String bdd, String user, String mdp) { this.serveur = serveur; this.bdd = bdd; this.user = user; this.mdp = mdp; } public void chargerPilote () { try { //Vérifier la présence du pilote Class.forName("com.mysql.jdbc.Driver"); } catch(Exception e) { throw new IllegalStateException("Le pilote JDBC n'existe pas", e); } public void seConnecter(){ this.chargerPilote(); String url = "jdbc:mysql://" + this.serveur + "/" + this.bdd ; try { this.maConnexion = DriverManager.getConnection(url, this.user, this.mdp); } catch(Exception e) { throw new IllegalStateException("Erreur de connexion à url : " + url); } } public void seDeconnecter () { try { if (this.maConnexion != null) { this.maConnexion.close(); } } catch(Exception e) { throw new IllegalStateException("Erreur lors de la fermeture de la connexion "); //exp.printStackTrace(); } } public Connection getMaConnexion () { return this.maConnexion; } }
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
24 nov. 2020 à 15:24
24 nov. 2020 à 15:24
Il ne faut surtout pas oublier le
Tu l'as bien mis dans le premier catch (mais tu as oublié de fermer l'accolade...) par contre pour les deux autres il n'y est pas, ce qui signifie que tu continuerais encore à masquer l'erreur, alors que l'on veut l'afficher le plus précisément possible.
, een second paramètre, c'est ce qui permet de conserver la véritable cause de l'erreur, sinon tu ne pourras jamais savoir d'où vient exactement le problème.
Tu l'as bien mis dans le premier catch (mais tu as oublié de fermer l'accolade...) par contre pour les deux autres il n'y est pas, ce qui signifie que tu continuerais encore à masquer l'erreur, alors que l'on veut l'afficher le plus précisément possible.
Utilisateur anonyme
Modifié le 24 nov. 2020 à 16:03
Modifié le 24 nov. 2020 à 16:03
J'espère que cette fois, c'est bon.
package modele; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Bdd { private String serveur, bdd, user, mdp ; private Connection maConnexion ; public Bdd(String serveur, String bdd, String user, String mdp) { this.serveur = serveur; this.bdd = bdd; this.user = user; this.mdp = mdp; } public void chargerPilote (){ try { //Vérifier la présence du pilote Class.forName("com.mysql.jdbc.Driver"); } catch(Exception e, e) { throw new IllegalStateException("Le pilote JDBC n'existe pas", e); } } public void seConnecter(){ this.chargerPilote(); String url = "jdbc:mysql://" + this.serveur + "/" + this.bdd ; try{ this.maConnexion = DriverManager.getConnection(url, this.user, this.mdp); } catch(Exception e, e) { throw new IllegalStateException("Erreur de connexion à url : " + url); } } public void seDeconnecter (){ try { if (this.maConnexion != null) { this.maConnexion.close(); } catch(Exception e, e) { throw new IllegalStateException("Erreur lors de la fermeture de la connexion "); //exp.printStackTrace(); } } public Connection getMaConnexion () { return this.maConnexion; } }
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
24 nov. 2020 à 16:07
24 nov. 2020 à 16:07
Ça ne peut pas être bon, tu vois bien que ça ne compile pas... (ou alors tu ne testes pas...)
J'ai écrit l'exemple tout à l'heure :
Avec toi ça devient
Tu vois bien que le
J'ai écrit l'exemple tout à l'heure :
catch(Exception e) { throw new IllegalStateException("Le pilote JDBC n'existe pas", e); }
Avec toi ça devient
catch(Exception e, e) { throw new IllegalStateException("Erreur de connexion à url : " + url); }
Tu vois bien que le
, e)dont je parle comme étant le second paramètre, il est sur le constructeur de l'exception, en aucun cas sur le catch (ça n'existe pas ça...)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
Modifié le 24 nov. 2020 à 16:25
Modifié le 24 nov. 2020 à 16:25
package modele;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Bdd
{
private String serveur, bdd, user, mdp ;
private Connection maConnexion ;
public Bdd(String serveur, String bdd, String user, String mdp) {
this.serveur = serveur;
this.bdd = bdd;
this.user = user;
this.mdp = mdp;
}
public void chargerPilote (){
try {
//Vérifier la présence du pilote
Class.forName("com.mysql.jdbc.Driver");
}
catch(Exception e) {
throw new IllegalStateException("Le pilote JDBC n'existe pas", e);
}
}
public void seConnecter(){
this.chargerPilote();
String url = "jdbc:mysql://" + this.serveur + "/" + this.bdd ;
try{
this.maConnexion = DriverManager.getConnection(url, this.user, this.mdp);
}
catch(Exception e) {
throw new IllegalStateException("Erreur de connexion à url : " + url);
}
}
public void seDeconnecter (){
try {
if (this.maConnexion != null) {
this.maConnexion.close();
}
catch(Exception e) {
throw new IllegalStateException("Erreur lors de la fermeture de la connexion ");
//exp.printStackTrace();
}
}
public Connection getMaConnexion ()
{
return this.maConnexion;
}
}
J'ai toujours la même erreur pourtant ... et plus encore ...
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
24 nov. 2020 à 17:58
24 nov. 2020 à 17:58
C'est normal d'avoir plus d'erreur, c'est le but même, pour comprendre ce qui se passe, sauf que tu n'en as toujours pas assez, car tu ne fais pas ce qu'il faut, il manque encore les causes des exceptions, les fameux
Je reprends ton code de départ :
,e)qu'il faut mettre partout !
Je reprends ton code de départ :
package modele; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Bdd { private String serveur, bdd, user, mdp ; private Connection maConnexion ; public Bdd(String serveur, String bdd, String user, String mdp) { this.serveur = serveur; this.bdd = bdd; this.user = user; this.mdp = mdp; } public void chargerPilote () { try { //Vérifier la présence du pilote Class.forName("com.mysql.jdbc.Driver"); } catch(Exception e) { throw new IllegalStateException("Le pilote JDBC n'existe pas", e); } } public void seConnecter(){ this.chargerPilote(); String url = "jdbc:mysql://" + this.serveur + "/" + this.bdd ; try { this.maConnexion = DriverManager.getConnection(url, this.user, this.mdp); } catch(Exception e) { throw new IllegalStateException("Erreur de connexion à url : " + url, e); } } public void seDeconnecter () { try { if (this.maConnexion != null) { this.maConnexion.close(); } } catch(Exception e) { throw new IllegalStateException("Erreur lors de la fermeture de la connexion ", e); } } public Connection getMaConnexion () { return this.maConnexion; } }
package modele; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import controleur.Train; public class Modele { private static Bdd uneBdd = new Bdd ("localhost", "sncf", "root","root"); //new Bdd ("localhost", "sncf", "root",""); pour PC public static ArrayList<Train> selectAllTrains() { ArrayList<Train> trains = new ArrayList<Train>(); try { uneBdd.seConnecter(); String requete = "select * from train ; "; Statement unStat = uneBdd.getMaConnexion().createStatement(); ResultSet desResultats = unStat.executeQuery(requete); while (desResultats.next()) { int idTrain = desResultats.getInt("idtrain"); int nbWagons = desResultats.getInt("nbwagons"); String designation = desResultats.getString("designation"); String dateCirculation = desResultats.getString("datecirculation"); String typeTrain = desResultats.getString("typetrain"); Train unTrain = new Train(idTrain, nbWagons, designation, dateCirculation, typeTrain); trains.add(unTrain); } desResultats.close(); unStat.close(); uneBdd.seDeconnecter(); } catch(Exception e) { throw new IllegalStateException("Erreur d'execution de la requete select.", e); } return trains; } public static void insertTrain(Train unTrain) { String requete ="insert into train values (null,'"+ unTrain.getDesignation()+"','"+unTrain.getDateCirculation() + "',"+unTrain.getNbWagons()+",'"+unTrain.getTypeTrain() +"');"; try { uneBdd.seConnecter(); Statement unStat = uneBdd.getMaConnexion().createStatement(); unStat.execute(requete); unStat.close(); uneBdd.seDeconnecter(); } catch(Exception e) { throw new IllegalStateException(("Erreur d'execution de la requete :" + requete, e); } } public static void deleteTrain(int idTrain) { String requete = "DELETE FROM train WHERE idtrain="+idTrain+";"; try { uneBdd.seConnecter(); Statement unStat = uneBdd.getMaConnexion().createStatement(); unStat.execute(requete); unStat.close(); uneBdd.seDeconnecter(); } catch(Exception e) { throw new IllegalStateException(("Erreur d'execution de la requete : "+requete, e); } } public static Train selectWhere(int idTrain) { Train unTrain = null; String requete = "select * from train where idtrain = " + idTrain + ";"; try { uneBdd.seConnecter(); Statement unStat = uneBdd.getMaConnexion().createStatement(); ResultSet leResultat = unStat.executeQuery(requete); if (leResultat.next()) { int nbWagons = leResultat.getInt("nbwagons"); String designation = leResultat.getString("designation"); String dateCirculation = leResultat.getString("datecirculation"); String typeTrain = leResultat.getString("typetrain"); //instancier le train récupéré de la bdd unTrain = new Train(idTrain, nbWagons, designation, dateCirculation, typeTrain); } leResultat.close(); unStat.close(); uneBdd.seDeconnecter(); } catch(Exception e) { throw new IllegalStateException("Erreur d'execution de la requete : "+requete, e); } return unTrain ; } public static void updateTrain(Train unTrain) { String requete = "update train set nbwagons = "+unTrain.getNbWagons() +" , designation = '"+unTrain.getDesignation() +"' , datecirculation = '"+unTrain.getDateCirculation() +"' , typetrain = '"+unTrain.getTypeTrain() +"' where idtrain= " +unTrain.getIdTrain()+";"; try { uneBdd.seConnecter(); Statement unStat = uneBdd.getMaConnexion().createStatement(); unStat.execute(requete); unStat.close(); uneBdd.seDeconnecter(); } catch(Exception e) { throw new IllegalStateException("Erreur d'execution de la requete : "+requete, e); } } public static ArrayList<Train> selectAllTrains(String mot) { ArrayList<Train> trains = new ArrayList<Train>(); String requete = "select * from train where designation like '%" + mot + "%'" + " or typetrain like '%" + mot + "%' " + " or datecirculation like '%" + mot + "%' ;" ; try { uneBdd.seConnecter(); Statement unStat = uneBdd.getMaConnexion().createStatement(); ResultSet desResultats = unStat.executeQuery(requete); while (desResultats.next()) { int idTrain = desResultats.getInt("idtrain"); int nbWagons = desResultats.getInt("nbwagons"); String designation = desResultats.getString("designation"); String dateCirculation = desResultats.getString("datecirculation"); String typeTrain = desResultats.getString("typetrain"); Train unTrain = new Train(idTrain, nbWagons, designation, dateCirculation, typeTrain); trains.add(unTrain); } desResultats.close(); unStat.close(); uneBdd.seDeconnecter(); } catch(Exception e) { throw new IllegalStateException("Erreur d'execution de la requete : " + requete, e); } return trains; } }
24 nov. 2020 à 11:56
24 nov. 2020 à 12:54
Donc d'une part tu as une erreur dans seConnecter, mais on ne sait pas laquelle vu que tu as juste "Erreur de connexion" à la place, et d'autre part malgré le fait que tu n'ais pas réussi à te connecter tu continues le programme, ce qui provoque d'autres erreurs par la suite (mais qu'il faut ignorer vu que c'est la première erreur le problème)
Il faudrait donc corriger tes try/catch pour que l'on puisse voir l'exception sous-jacente afin d'interpréter l'erreur et la corriger :
Remarque : la classe Bdd est plutôt très mal fichue, pour qu'elle soit utile il faudrait la revoir de fond en comble.
Un exemple :