Probleme sur le code

Fermé
aichakhoumena2013 - 30 janv. 2013 à 02:45
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 30 janv. 2013 à 03:48
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

KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
30 janv. 2013 à 03:48
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