2010-02-16 6 views
1

J'écris un programme Java/Perl combinant des fichiers XML dans une base de données SQL Oracle. Il y a deux tables dans la base de données - une qui contient les données des fichiers XML et une autre qui contient des informations sur les fichiers eux-mêmes (nom du fichier, heure de création, etc.). Fondamentalement, lorsqu'un nouveau fichier XML arrive, le programme Java vérifie s'il a déjà été analysé ou partiellement analysé. Si c'est le cas, il modifie la colonne STATUS dans la table filestatus de 'bon' à 'mauvais' pour cet ID de fichier en utilisant UPDATE FILESTATUS SET STATUS='bad' WHERE ID=?. Cependant, quand je l'exécute, il se bloque en faisant cela. Des idées pour lesquelles cela pourrait arriver? Aucun message d'erreur ne se produit, il se bloque simplement. Le code est ci-dessous.SQL Update bloque le programme Java

static void markDataBad(String docID) 
    { 
     try 
     { 
      String update = "UPDATE FILESTATUS SET STATUS='bad' WHERE ID=?"; 
      PreparedStatement updateStatus = Main.con.prepareStatement(update); 
      updateStatus.setString(1, docID); 
      updateStatus.execute(); 
     } 
     catch (Exception ex) {ex.printStackTrace();} 
    } 

je l'ai déjà essayé de changer updateStatus.execute()-updateStatus.executeQuery() et updateStatus.executeUpdate(), mais rien ne semble avoir changé.

Merci d'avance!

Répondre

9

Avez-vous des modifications non-souhaitées à cette table ailleurs? J'ai eu ce problème aujourd'hui parce que j'avais apporté quelques modifications à la table dans SQL * Developer, et cela tenait sur un verrou sur la table jusqu'à ce que je l'aie commise.

+0

Il s'avère que je l'ai fait. Ran commit sur la base de données et maintenant il se met à jour sans problème (enfin, à part les problèmes qui sont apparus plus loin dans le code). Merci! – ryantmer

0

Votre utilisateur a-t-il l'autorisation pour cette table?
Avez-vous émis avant un verrou sur la table ou un commit manquant?
Pouvez-vous exécuter la requête dans shell?