2017-03-18 2 views
0

Cette requête fonctionnait au début mais quand je l'ai mise à jour encore et encore, elle a cessé de fonctionner. Je travaille sur netbeans et utilise le serveur xampp.
Et une chose étrange, maintenant lorsque la valeur est mise à jour les 2 dernières lignes et la dernière colonne restent inchangées.Java - La requête de mise à jour ne fonctionne pas à chaque fois

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { 

    String val = txt_val.getText(); 
    String col = txt_col.getText(); 
    Connection conn = null; 
    PreparedStatement pstmt = null; 
    ResultSet rs = null; 
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     conn = DriverManager.getConnection("jdbc:mysql://localhost/net", "root", ""); 

     pstmt = conn.prepareStatement(
     "update userdetail set 
      name = ? 
     , username = ? where name = ? AND username = ? ") 

     pstmt.setString(1, val); 
     pstmt.setString(2, val); 

     pstmt.setString(3, col); 
     pstmt.setString(4, col); 

     int i = pstmt.executeUpdate(); 
     if (i > 0) { 
      JOptionPane.showMessageDialog(null, "done"); 
     } else { 
      JOptionPane.showMessageDialog(null, "query failed"); 
     } 

    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null, e); 
    } 

} 

Répondre

1

Cette requête a travaillé au début, mais quand je mis à jour encore et encore il a cessé de travailler

Ceci est logique, le problème est dans votre requête:

problème

update userdetail set name = ?, username = ? where name = ? AND username = ? 

Supposons que si votre name = "name" and username = "username "dans la base de données
Les nouvelles valeurs name = "name1" and username = "username1"

Première mise à jour

.. set name = "name1", username = "username1" where name = "name" AND username = "username" 

Deuxième mise à jour

Si vous le répéter à nouveau vous répéterez votre requête avec l'ancien valeurs du nom et du nom d'utilisateur:

.. set name = "name2", username = "username2" where name = "name" AND username = "username" 

Le nom et le nom d'utilisateur sont des changements dans la première fois, et il n'y a pas de valeur dans la base de données comme ceci: name = "name" AND username = "username"


Solution

Avant votre mise à jour, vous devez obtenir les informations de votre base de données afin que vous puissiez mettre à jour votre dossier sans aucun problème.

Ou

La meilleure pratique consiste à mettre à jour votre dossier avec une clé primaire non des changements, par exemple:

update ... where id = something 

espère que vous obtenez mon point.

+0

Je n'ai utilisé aucune clé primaire dans ma table car j'ai besoin de mettre à jour toute la table si un nom correspond à celle-ci. Par exemple si dans le tableau entier existe un nom 'joey' je le remplacerais par 'x' –

+0

oui, donc quand vous le remplacez la première fois que vous ne pouvez pas le remplacer la deuxième fois, parce que son @SnehaP déjà changé? –

+0

Droit ... alors je vais devoir utiliser des paramètres différents pour la comparaison? –