Supprimer une ligne d'un tableau?
Résolu
Nox972
Messages postés
24
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
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.
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
-
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 asstmt.setString(1, "outil A");
etstmt.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.-
voila, après modification. faut-il rajoute autre chose?
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, "id_outil"); 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); } } -
-
"faut-il rajoute autre chose?"
Oui, il faut fermer les ressources (Connection, Statement, ResultSet) et le faire proprement, c'est à dire bien gérer les cas d'exceptions.
Remarque : ton commit et ton rollback ne servent à rien vu que tu n'as qu'une seule requête, tu ne peux donc pas te retrouver dans un état intermédiaire où l'échec d'une seconde requête nécessite d'annuler le succès d'une première requête... -
-
Historiquement :
Connection con = null; Statement stmt = null; try { conn = Connection.getConnection(url,user,pwd); stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); // ... rs.close(); } catch (Exception e) { // ... } finally { if (stmt != null) { try { stmt.close(); } catch (Exception e) { } } if (conn != null) { try { conn.close(); } catch (Exception e) { } } }
Depuis Java 7 :try ( Connection con = Connection.getConnection(url,user,pwd); Statement stmt = conn.createStatement(); ) { ResultSet rs = stmt.executeQuery(sql); // ... rs.close(); } catch (Exception e) { // ... }
-