Probleme sur le code

aichakhoumena2013 -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,

j'ai une table medecin et je veux quand j'entre le ID_MEDECIN
d'un medecin et je clique sur le button ,il le supprime,mais le code il ne fait pas ça et il affiche pas des erreurs

Le code est sur NetBeans:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import javax.swing.*;

public class SupprimerMedecin extends JFrame implements ActionListener{

JButton Afficher;
JButton quitter;
JButton Supprimer;

JLabel ID_Medecin;

JPanel panneau,panneau1;
public static String sql,sql1;
//public static String str3;

public static JTextField id_medecin;

public SupprimerMedecin() {
super("SupprimerMedecin");
ID_Medecin=new JLabel("ID_MEDECIN");
id_medecin=new JTextField(20);
Supprimer = new JButton("Supprimer"); Afficher = new JButton("Afficher"); quitter = new JButton("quitter");panneau = new JPanel();panneau1 = new JPanel();
panneau.setLayout(new BorderLayout());
this.add(BorderLayout.WEST,panneau1);
Supprimer.addActionListener(this);
Afficher.addActionListener(this);
quitter.addActionListener(this);

panneau1.add(ID_Medecin);
panneau1.add( id_medecin);

panneau1.add(Supprimer);
panneau1.add(Afficher);
panneau1.add(quitter);

panneau.add(panneau1);
setContentPane(panneau);
this.setResizable(false);
setVisible(true) ;
setSize(250, 600);

}

@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==Supprimer){

String str3 =id_medecin.getText();

// String a = "'";String z = ",";
// sql4= "alter table medecin drop column ID_MEDECIN ='"+str3+"'";
sql= "delete from medecin where ID_MEDECIN ='"+str3+"'";
// System.out.println(sql4);
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection connection = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:oracl3", "cabinet",
"2013");
Statement stmt = connection.createStatement();

sql1="select * from medecin";
ResultSet rs = stmt.executeQuery(sql);
ResultSet rs1 = stmt.executeQuery(sql1);
while (rs1.next()) {

System.out.println(rs1.getString(1));
System.out.println(rs1.getString(2));
System.out.println(rs1.getString(3));
System.out.println(rs1.getString(4));

}

}
catch (ClassNotFoundException i) {

System.out.println("Where is your Oracle JDBC Driver?");
i.printStackTrace();

} catch (SQLException i) {
System.out.println("Connection Failed! Check output console");
i.printStackTrace();

}

}
if(e.getSource()==quitter){
System.exit(0);

}
if(e.getSource()==Afficher){

ListeMedecin.f1.setVisible(true);

}

}
public static void main(String args[]){

JFrame f2 = new SupprimerMedecin();

}

}
aidez moi,svp

1 réponse

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    A priori le Class.forName devrait être fait une seule fois, au début de l'application, pas à chaque fois que tu appuies sur un bouton !

    Ensuite, sql et sql1 et id_medecin sont déclarées static, il est donc aberrant qu'elles soient modifiées à chaque action ! De manière générale, évite de mettre des attributs là où des variables locales suffisent. Et utilise l'encapsulation en déclarant private, et idéalement final, tout ce qui peut l'être !

    Au passage : très mauvaise idée de déclarer deux objets différents en les appelant ID_Medecin, et id_medecin, c'est confusant d'avoir deux noms aussi proches, d'autant qu'aucun des deux ne respecte les conventions de nommage Java.

    De plus : jamais tu ne fermes les ResultSet, Statement, et Copnnection, c'est une erreur très grave !

    Après, je ne connais pas grand chose aux bdd, donc je ne peux pas contrôler tes requêtes, mais voici déjà un beau code bien propre, ce sera plus agréable à regarder (si ce n'est pour toi, au moins pour ceux qui prendront la suite de cette discussion).

    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JTextField;
    
    public class SupprimerMedecin extends JFrame implements ActionListener
    {
        private static final long serialVersionUID = 1;
            
        private final JTextField txtIdMedecin;
        private final JButton btnAfficher, btnQuitter, btnSupprimer;
        
        private final Connection conn;
        
        public SupprimerMedecin(Connection connection)
        {    
            conn = connection;
            
            setTitle("SupprimerMedecin");
            setLayout(new FlowLayout());
            setSize(250, 600);
            setResizable(false);
            this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
            
            add(new JLabel("ID_MEDECIN"));
            
            txtIdMedecin=new JTextField(20);
            add(txtIdMedecin);
        
            btnSupprimer = new JButton("Supprimer");
            btnSupprimer.addActionListener(this);
            add(btnSupprimer);
            
            btnAfficher = new JButton("Afficher");
            btnAfficher.addActionListener(this);
            add(btnAfficher);
            
            btnQuitter = new JButton("quitter");
            btnQuitter.addActionListener(this);
            add(btnQuitter);
            
            setVisible(true);
        }
        
        @Override 
        public void actionPerformed(ActionEvent e)
        {
            if (e.getSource()==btnSupprimer)
            {
                try
                {                
                    Statement stmt = conn.createStatement();
                    
                    String sql = String.format("delete from medecin where ID_MEDECIN ='%s'",txtIdMedecin.getText());
                    ResultSet rs = stmt.executeQuery(sql);
                    rs.close();
                    
                    String sql1 = "select * from medecin";  
                    ResultSet rs1 = stmt.executeQuery(sql1);
                    
                    while (rs1.next())
                    {
                        System.out.println(rs1.getString(1)); 
                        System.out.println(rs1.getString(2)); 
                        System.out.println(rs1.getString(3)); 
                        System.out.println(rs1.getString(4)); 
                    }
                    rs1.close();
                    
                    stmt.close();
                }
                catch (SQLException ex)
                {
                    ex.printStackTrace();
                }
            }
            
            if(e.getSource()==btnQuitter)
            {            
                try 
                {
                    conn.close();
                } 
                catch (SQLException ex) 
                {
                    ex.printStackTrace();
                }
                
                System.exit(0);
            }
            
            if(e.getSource()==btnAfficher)
            {
                //ListeMedecin.f1.setVisible(true); //TODO
            } 
        }
        
        public static void main(String[] args)
        {
            try
            {
                Class.forName("oracle.jdbc.driver.OracleDriver");
                Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oracl3", "cabinet", "2013");
                new SupprimerMedecin(connection);
            }
            catch (ClassNotFoundException e)
            {
                System.err.println("Where is your Oracle JDBC Driver?");
                e.printStackTrace();
            }
            catch (SQLException e)
            {
                System.err.println("Connection Failed! Check output console"); 
                e.printStackTrace();
            }
        }
    }
    0