2010-02-19 32 views
2

我在下面的Java代碼中遇到問題。它應該在給定ID的表格中更新某些記錄,以及STATUS列的'好'(這在任何給定時間只有一行)。但是,當我運行下面的代碼時,它似乎忽略AND STATUS = 'good'部分,並且更新所有NUMRECS,無論ID匹配。在Java中有多個條件的Oracle UPDATE命令

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

我試過尋找這個無處不在,但我找不到任何答案。當我直接從數據庫運行命令時,它運行良好,這更讓我困惑。

在此先感謝。

+0

該查詢應該工作並尊重'status ='good''部分。還有其他的東西必須在玩。如果您在另一個數據庫會話中親自操作狀態字段進行測試,您確定在測試發佈的代碼之前已經提交了更改嗎? – 2010-02-19 22:37:39

+0

是的,我相信,因爲在我提交之前程序根本無法工作(甚至不會插入數據,更不用說更新了)。感謝您的建議,雖然:) – ryantmer 2010-02-19 23:44:20

回答

2

嘗試寫

"WHERE ID = ? AND STATUS = ?" 

,並使用

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

哦,我的,我覺得愚蠢。我甚至沒有想到這一點。完美的作品! 但是,我有點好奇,爲什麼我上面做的沒有工作......任何想法? 謝謝! – ryantmer 2010-02-19 17:50:49

+0

@ryantmer:沒有想法,對不起。我現在嘗試了類似的東西,並且它工作得很好。只匹配行更新... – 2010-02-19 18:15:19

2

這並不能說明問題,但我不知道你爲什麼不這樣做:

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);} 
    } 

看不到您的數據,所以我不能分辨是否是個案(「GOOD」!=「good」)

確定你連接到數據庫你認爲你是?如果連接字符串指向一個數據庫,並且您針對另一個數據庫運行測試,那麼這可以解釋爲什麼您看不到更改。

+0

謝謝! Peter Lang在觸發器上的速度更快;) 而且這種情況是正確的,因此我一定要保持小寫。至於連接,其他一切正常,所以我不知道爲什麼這不會! = / – ryantmer 2010-02-19 17:54:28