Supprimer une ligne d'un tableau?

[Résolu/Fermé]
Signaler
Messages postés
21
Date d'inscription
jeudi 9 juillet 2015
Statut
Membre
Dernière intervention
14 août 2015
-
Messages postés
16398
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
19 septembre 2021
-
Bonjour,

Je travaille sur Netbeans et PHPadmin, je voudrais sélectionner une ligne de mon tableau avec ma souris et appuyer sur le bouton supprimer pour le supprimer de façon instantanée.



int ligneSelectionne = TableOutil.getSelectedRow();
String outil = TableOutil.getValueAt(ligneSelectionne, 0).toString();
PreparedStatement stmt = null;
String wql = "DELETE FROM `outil` WHERE nom_outil='?'";
try {
maconnexion.setAutoCommit(false);
stmt = maconnexion.prepareStatement(wql);
stmt.setString(1, "outil A");
stmt.setString(2, "outil avant");
stmt.executeUpdate();
maconnexion.commit();
} catch (SQLException e ) {
Connexion.printSQLException(e);
if (maconnexion != null) {
try {
System.err.print("Transaction is being rolled back");
maconnexion.rollback();
} catch(SQLException excep) {
Connexion.printSQLException(excep);
}
}

1 réponse

Messages postés
16398
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
19 septembre 2021
2 878
Bonjour,

Ta requête semble fausse.
String wql = "DELETE  FROM `outil` WHERE nom_outil='?'";

Ce devrait être :
String wql = "DELETE  FROM outil WHERE nom_outil=?";

Le paramètre désigné par
?
n'a pas à avoir d'apostrophe, c'est Java qui les mettra si cela correspond à un String.

Ensuite tu as
stmt.setString(1, "outil A");
et
stmt.setString(2, "outil avant");
mais tu n'as qu'un seul
?
alors à quoi correspond le deuxième setString ?

Remarque : pour bien se comprendre sur le vocabulaire, ce que tu manipules c'est une table, pas un tableau.
Messages postés
16398
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
19 septembre 2021
2 878 >
Messages postés
21
Date d'inscription
jeudi 9 juillet 2015
Statut
Membre
Dernière intervention
14 août 2015

On va commencer par le dernier message d'erreur : tu compiles ton code en Java 5 (qui a plus de 10 ans) et du coup tu n'as pas accès à un certain nombre de fonctionnalités plus récentes dont SwingWorker (Java 6), les try-with-ressources (Java 7), etc. d'où les erreurs de compilation.
Pour information, cela fait plus d'un an que Java 8 est sorti, il y a donc assez peu d'intérêt de coder encore en Java 5...

Quant à conn.execute(); je ne vois pas pourquoi tu veux utiliser execute() qui est une méthode de SwingWorker sur conn qui est un objet de type Connection...
Messages postés
21
Date d'inscription
jeudi 9 juillet 2015
Statut
Membre
Dernière intervention
14 août 2015
>
Messages postés
16398
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
19 septembre 2021

voila mon dernier probleme.
Messages postés
21
Date d'inscription
jeudi 9 juillet 2015
Statut
Membre
Dernière intervention
14 août 2015

oui j'utilise toujours ce java la.
Derniere question:
Voici mon code pour mon bouton supprimer.

public class DeleteOutil extends SwingWorker<Void, Void> {
    
    private final String outil;
    private final JButton toEnable;

    public DeleteOutil(String outil, JButton toEnable) {
        this.outil = outil;
        this.toEnable = toEnable;
    }

    @Override
   public Void doInBackground() {
    
        
        PreparedStatement stmt=null;
        String wql = "DELETE  FROM outil WHERE id_outil=?";
        try {
            Connexion con = Connexion.getConnection(url,user,pwd);
            stmt = con.prepareStatement(wql);
  
            stmt.setString(1, outil);
            stmt.executeUpdate(wql);
        }
   
      catch (Exception e) {
           
        }
     finally {
   if ( stmt!=null ) {
          // fermer/libérer la ressource
          stmt.close();
   }
        }  return null;
    }
    
    
    @Override
    protected void done() {
        toEnable.setEnabled(true);
    }    
}
 


j'ai un probleme avec :

Connexion con = Connexion.getConnection(url,user,pwd);

Il n'est pas adapter à mon programme que dois je mettre pour me connecter à ma base de donnee.
voici mon code connexion:

package gestionoutilbricolage;
import java.sql.*;
/**
 *
 *
 */
public class Connexion  {
   

    String urlPilote="com.mysql.jdbc.Driver";//Direction pour charger le pilote
    String urlBasedonnees="jdbc:mysql://localhost:3306/bdboiteoutil";// Direction pour la connexion à la base de données
    Connection conn;
    public Connexion () {
    //On charge  notre pilote
    try{
       Class.forName(urlPilote);
       System.out.println("Le pilote est chargé");
      }
    catch(ClassNotFoundException ex){
      System.out.println(ex);
     }
    // On se connecte à la base de donnée
    try{
        conn=DriverManager.getConnection(urlBasedonnees,"root","");
        System.out.println("La Base de données est chargé");
    }
    
    catch(SQLException  ex){
        System.out.println(ex);
    }
    
    
        }
    
     Connection ObtenirConnexion(){
         return conn;
     }

     public void setAutoCommit(boolean autoCommit) throws SQLException {
       conn.setAutoCommit(autoCommit);
     
}
    public void close() throws SQLException {
       conn.close();
    }
     
     
     
  
     public void rollback() throws SQLException {
       conn.rollback();
     }
     public void commit() throws SQLException {
       conn.commit();
    }
     public PreparedStatement prepareStatement(String sql) throws SQLException {
       return conn.prepareStatement(sql);
}
 
public static void printSQLException(SQLException ex) {
    for (Throwable e : ex) {
      if (e instanceof SQLException) {
        if (ignoreSQLException(((SQLException)e).getSQLState()) == false) {
          e.printStackTrace(System.err);
          System.err.println("SQLState: " + ((SQLException)e).getSQLState());
          System.err.println("Error Code: " + ((SQLException)e).getErrorCode());
          System.err.println("Message: " + e.getMessage());
          Throwable t = ex.getCause();
          while (t != null) {
            System.out.println("Cause: " + t);
            t = t.getCause();
          }
        }
      }
    }
  }
public static boolean ignoreSQLException(String sqlState) {
    if (sqlState == null) {
      System.out.println("The SQL state is not defined!");
      return false;
    }
    // X0Y32: Jar file already exists in schema
    if (sqlState.equalsIgnoreCase("X0Y32"))
      return true;
    // 42Y55: Table already exists in schema
    if (sqlState.equalsIgnoreCase("42Y55"))
      return true;
    return false;
  }
}

Messages postés
21
Date d'inscription
jeudi 9 juillet 2015
Statut
Membre
Dernière intervention
14 août 2015

Un dernier coup de main SVP
le projet est en 1.5 et je pensais mettre cela pour regler mon probleme avec getconnection.
public class Connexion {
    private static final String urlBasedonnees = "jdbc:mysql://localhost:3306/bdboiteoutil";

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(urlBasedonnees,"root","");
    }
}
Messages postés
16398
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
19 septembre 2021
2 878 >
Messages postés
21
Date d'inscription
jeudi 9 juillet 2015
Statut
Membre
Dernière intervention
14 août 2015

Tu peux également faire DriverManager.getConnection(urlBasedonnees,"root",""); directement dans ton code, rien ne t'en empêche, ça évite d'avoir à gérer une classe rien que pour ça...