IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Supprimer de la base de données selon le résultat d'un SELECT


Sujet :

JDBC Java

  1. #1
    Membre régulier
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2012
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Avril 2012
    Messages : 203
    Points : 85
    Points
    85
    Par défaut Supprimer de la base de données selon le résultat d'un SELECT
    Bonjour ,

    j'ai créer une fonction qui supprime depuis une table précise , selon le résultat d'un SELECT d'autres tableaux
    après l'exécution du code , la suppression est faite juste pour les parties correspondantes au 1er tableau (c-à-d : juste pour la 1ère itération de la boucle)
    je veux savoir le problème dans mon code le voilà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    public void SupprimerPartie(String fich, String date){
    		   int idf = 0;
     
     
    		  try {
     
    				Lire("SELECT idFichier FROM fichiers WHERE nomFichier='"+fich+"' AND dateFichier='"+date+"'");
     
    				while(rs.next()){
    					idf = rs.getInt(1);
    					System.out.println(idf);
    				}
    					rs1 = st1.executeQuery("SELECT idTableau FROM tableaux WHERE tableaux.idFichier = '"+idf+"' ");
    					while(rs1.next()){
     
    						int idtab = rs1.getInt(1);
    						System.out.println(idtab);
     
    						rs2 = st2.executeQuery("SELECT nomPartie FROM parties WHERE parties.idTableau = '"+idtab+"' ");
    						while(rs2.next()){
     
    							String table_partie = rs2.getString(1);
    							System.out.println(table_partie);					
    							System.out.println("supressssiooooon....."+table_partie+"... "+idtab);	
    							MiseAJour("DELETE FROM "+table_partie+" WHERE "+table_partie+".idTableau= '"+idtab+"' ");
    						}
    				     }
     
     
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}			
     
     
    	   }
    en résultat ça donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    1
    10
    ratio_stk_kg_t
    supressssiooooon.....ratio_stk_kg_t... 10
    ratio_servobal_kg_t
    supressssiooooon.....ratio_servobal_kg_t... 10
    11
    ratio_stk_m3_t
    supressssiooooon.....ratio_stk_m3_t... 11
    ratio_servobal_m3_t
    supressssiooooon.....ratio_servobal_m3_t... 11
    12
    ratio_stk_kwh_t
    supressssiooooon.....ratio_stk_kwh_t... 12
    ratio_servobal_kwh_t
    supressssiooooon.....ratio_servobal_kwh_t... 12
    ratio_maamoura
    supressssiooooon.....ratio_maamoura... 12
    Merci d'avance

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 173
    Points : 187
    Points
    187
    Par défaut
    Si je comprend bien ton problème, il ne passe qu'une fois dans la boucle while(rs2.next()) alors que par rapport aux données il devrait passer plusieurs fois? Peux tu nous donner le code de Lire() ainsi qu'un exemple de données que tu as en base stp?
    Diplomes: DUT informatique et Master 2 MIAGE.
    Développeur Java/J2EE (principalement), .NET (niveau scolaire mais je compte m'améliorer ) et Web (HTML, PHP...).

  3. #3
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Citation Envoyé par sihamnet Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    public void SupprimerPartie(String fich, String date){
    		   int idf = 0;
    		  
    		    
    		  try {
    			    
    				Lire("SELECT idFichier FROM fichiers WHERE nomFichier='"+fich+"' AND dateFichier='"+date+"'");
    				
    				while(rs.next()){
    					idf = rs.getInt(1);
    					System.out.println(idf);
    				} <---
    					rs1 = st1.executeQuery("SELECT idTableau FROM tableaux WHERE tableaux.idFichier = '"+idf+"' ");
    					while(rs1.next()){
    					
    						int idtab = rs1.getInt(1);
    						System.out.println(idtab);
    						
    						rs2 = st2.executeQuery("SELECT nomPartie FROM parties WHERE parties.idTableau = '"+idtab+"' ");
    						while(rs2.next()){
    							
    							String table_partie = rs2.getString(1);
    							System.out.println(table_partie);					
    							System.out.println("supressssiooooon....."+table_partie+"... "+idtab);	
    							MiseAJour("DELETE FROM "+table_partie+" WHERE "+table_partie+".idTableau= '"+idtab+"' ");
    						}
    				     }
    				
    			         Devrait plutôt être ici 	
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}			
    			
    
    	   }
    Honnêtement je suis pas sûr d'avoir tout compris mais d'après ce que je voir, tu ne fermes pas ton accolade au bon endroit (celle en rouge)

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 173
    Points : 187
    Points
    187
    Par défaut
    Effectivement au vu du code, de son indentation et de l'utilisation de idf dans rs1 = st1.executeQuery("SELECT idTableau FROM tableaux WHERE tableaux.idFichier = '"+idf+"' "); je pencherais aussi pour un problème d'accolade.
    Diplomes: DUT informatique et Master 2 MIAGE.
    Développeur Java/J2EE (principalement), .NET (niveau scolaire mais je compte m'améliorer ) et Web (HTML, PHP...).

  5. #5
    Membre régulier
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2012
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Avril 2012
    Messages : 203
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par philou44300 Voir le message
    Si je comprend bien ton problème, il ne passe qu'une fois dans la boucle while(rs2.next()) alors que par rapport aux données il devrait passer plusieurs fois? Peux tu nous donner le code de Lire() ainsi qu'un exemple de données que tu as en base stp?
    le voilà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void Lire(String req) {                         //Selectionner la Base de Données
    		   try {
    			   rs=st.executeQuery(req);
    			   } catch (SQLException e) {
    			   	// TODO Auto-generated catch block
    			   	e.printStackTrace(); 
    			    }
    	   }

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 173
    Points : 187
    Points
    187
    Par défaut
    As tu essayé la solution de Nico02 (déplacement d'accolade)? Si cela ne correspond pas à ce que tu souhaites alors il nous faudrait avoir un exemple de données avec le résultat attendu .
    Diplomes: DUT informatique et Master 2 MIAGE.
    Développeur Java/J2EE (principalement), .NET (niveau scolaire mais je compte m'améliorer ) et Web (HTML, PHP...).

  7. #7
    Membre régulier
    Femme Profil pro
    Etudiante
    Inscrit en
    Avril 2012
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Avril 2012
    Messages : 203
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par philou44300 Voir le message
    As tu essayé la solution de Nico02 (déplacement d'accolade)? Si cela ne correspond pas à ce que tu souhaites alors il nous faudrait avoir un exemple de données avec le résultat attendu .
    j'ai essayé le déplacement d'accolade mais le problèmes reste le même

    Je partage avec vous le constructeur de la classe connexion qui à laquelle appartienne le fonction SupprimerPartie, puisque je doute que c'est un problème de ResultSet et de Statement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    public class Connexion {
     
    	   private Connection con;
    	   private Statement st, st1, st2, st3;
    	   protected ResultSet rs, rs1, rs2,rs3;
    	   String DB="mydatabase";
     
    	      //Constructeur
    	     public Connexion(String DB) {  
    	    	 String url="jdbc:mysql://localhost/"+DB;                         //Définition de l’URL de connexion
    	         try {
    	                   Class.forName("com.mysql.jdbc.Driver");                //Chargement du pilote JDBC
    	                   con = DriverManager.getConnection(url, "root", "");    //Etablissement de la connexion
    	                   st = con.createStatement();   /*Afin d’accéder ou de modifier les informations contenues dans la base de données,  il convient d’utiliser un objet de type Statement. Une instance de cet objet est retournée par cette méthode*/ 
    	                   st1 = con.createStatement();
    	                   st2 = con.createStatement(); 
    	                   st3 = con.createStatement(); 
     
    	         }  
    	        catch (ClassNotFoundException e) {
    	         System.err.println("Problème de pilote");
    	        }
    	        catch (SQLException c) {
    	         System.err.println("Base de données non trouvée ou requête incorrecte");
    	        }
    	   }

  8. #8
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Citation Envoyé par sihamnet Voir le message
    Bonjour ,
    j'ai créer une fonction qui supprime depuis une table précise , selon le résultat d'un SELECT d'autres tableaux
    après l'exécution du code , la suppression est faite juste pour les parties correspondantes au 1er tableau (c-à-d : juste pour la 1ère itération de la boucle)
    je veux savoir le problème dans mon code le voilà :
    Pardon mais le problème majeur dans tout ça c'est qu'on comprend pas vraiment ce que tu veux faire. Ton problème n'étant pas un problème technique (tu n'as pas d’erreurs à l’exécution) on ne pourra pas t'aider que si tu ne prends le temps de nous expliquer exactement ce qu'est censé faire ton programme avec pourquoi pas un exemple de données et surtout ce que tu attends comme résultat à la fin.

    En plus la plupart du temps pour les problèmes comme le tiens, c'est que tu n'as pas pris le temps de relire calmement ton programme pour voir ce qu'il fait exactement et pourquoi ça ne colle pas avec ce qu'il est censé faire.

    Prends donc 10 mins pour mettre tes idées à plat en relisant ton programme et je suis certain que la solution deviendra évidente

    Cdt.


    Edit : Quelques points techniques :

    - Utilises de préférence un PreparedStatement au lieu d'un Statement. Car en plus d'avoir tout un tas d'avantage, c'est beaucoup plus efficace lorsque comme toi on exécute plusieurs fois la même requêtes.

    - Pense à fermer correctement des ressources une fois que tu ne t'en sert plus !

Discussions similaires

  1. [MySQL] afficher le contenu d'une base de données selon les checkbox cochés
    Par lamou23 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 31/07/2010, 21h05
  2. Réponses: 9
    Dernier message: 28/04/2009, 15h23
  3. Supprimer dans une base de donnée
    Par hugo7 dans le forum ASP.NET
    Réponses: 6
    Dernier message: 22/12/2008, 10h21
  4. recherche dans base de données selon 2 critères
    Par Nathalie68 dans le forum Excel
    Réponses: 1
    Dernier message: 20/02/2008, 21h19
  5. [MySQL] Image pour supprimer dans une base de données
    Par fabpeden dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/07/2007, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo