2010-02-19 2 views
2

Je rencontre des problèmes avec le code Java ci-dessous. Il est supposé mettre à jour certains enregistrements dans une table où l'ID est donné, et où la colonne STATUS est 'bonne' (ce n'est qu'une seule ligne à la fois). Cependant, lorsque je lance le code ci-dessous, il semble ignorer la partie AND STATUS = 'good', et mettre à jour tous les NUMRECS où correspond le ID. J'ai essayé de chercher ceci partout, mais je n'ai pas pu trouver de réponse. Quand je lance la commande directement à partir de la base de données, cela fonctionne très bien, ce qui me rend encore plus confus.Commande Oracle UPDATE avec plusieurs conditions en Java

Merci d'avance.

+0

Cette requête devrait fonctionner et respecter la partie 'status = 'good''. Quelque chose d'autre doit être en jeu. Si vous le testez en manipulant le champ d'état vous-même dans une autre session de base de données, êtes-vous sûr de valider vos modifications avant de tester le code que vous avez publié? –

+0

Oui, j'en suis sûr, car le programme ne fonctionnera pas du tout avant de m'engager (il n'introduira même pas les données, et encore moins les mettra à jour). Merci pour la suggestion si :) – ryantmer

Répondre

2

Essayez d'écrire

"WHERE ID = ? AND STATUS = ?" 

et utiliser

insert.setString(3, "good"); 
+0

Oh mon Dieu, je me sens bête. Je n'ai même pas pensé à ça. Fonctionne parfaitement! Cependant, je suis un peu curieux de savoir pourquoi ce que j'ai fait ci-dessus n'a pas fonctionné ... des idées? Merci beaucoup! – ryantmer

+0

@ryantmer: Aucune idée, désolé. J'ai essayé quelque chose de similaire en ce moment, et ça a bien marché. Seules les lignes correspondantes ont été mises à jour ... –

2

Cela n'explique pas le problème, mais je me demandais pourquoi vous ne le faites pas:

static void insertNumRecs() 
    { 
     PreparedStatement insert = null; 
     try 
     { 
      String insertNumRecsCommand = "UPDATE FILESTATUS SET NUMRECS = ? " + 
        "WHERE ID = ? AND STATUS = ?"; 
      insert = Main.con.prepareStatement(insertNumRecsCommand); 
      insert.setInt(1, Main.numRecs); 
      insert.setString(2, Main.docID); 
      insert.setString(3, "good"); 
      insert.executeUpdate(); 
     } 
     catch (Exception ex) {ex.printStackTrace();} 
     finally {close(null, insert);} 
    } 

Vous ne pouvez pas voir vos données, donc je ne peux pas dire si c'est un problème ("GOOD"! = "Bon")

Bien sûr, vous vous connectez à la base de données que vous pensez être? Si la chaîne de connexion pointe vers une base de données et que vous exécutez votre test par rapport à une autre, cela explique pourquoi vous ne voyez pas la modification.

+0

Merci! Peter Lang a été plus rapide sur le déclencheur cependant;) Et le cas est correct, je me suis assuré de garder tout en minuscules pour cette raison. En ce qui concerne la connexion, tout le reste fonctionne bien, donc je ne sais pas pourquoi cela ne le serait pas! = / – ryantmer