2011-04-14 88 views
1

我使用prepare語句來執行更新語句。關係運算符無效

PreparedStatement stmt = null; 
     stmt = connection.prepareStatement("UPDATE " + table + " SET date = ?, id = ?, n = ? " + 
       "WHERE (id_v = ?) AND (id_vid = ?)"); 
     stmt.setDate(1, n.getDate()); 
     stmt.setInt(2, n.getId()); 
     stmt.setInt(3, n.getN()); 
     stmt.setInt(4, n.getId_v()); 
     stmt.setInt(5, n.getId_vid()); 
     stmt.executeUpdate(); 
     stmt.close(); 

,但我得到一個異常Ĵava.sql.SQLException: ORA-00920: invalid relational operator

這有什麼錯我的代碼?

P.S表是字符串parametre我穿過方法

編輯 的問題是通過使用簡單的聲明(但不是PrepareStatement),並通過串聯插入到參數應用SQL UPDATE解決。聲明表的SQL腳本已由Power Designer從物理數據模型圖生成。它創建表格字段爲「日期」,「id_v」,「ID」等,所以問題不在日期字段。

回答

2

也許它應該是AND (id_vid = ?)第二個條件?

現在,它說AND (id vid = ?)這可能是一個錯字。

+0

不,問題不在這個地方。我在發佈後輸入此代碼時有誤。但是在代碼中它沒有這樣的錯誤 – maks 2011-04-14 21:17:23

2

你真的有一個名爲「日期」的列嗎?如果是這樣,這不是一個很好的做法。唯一能讓它工作的方法是:

SQL> CREATE TABLE tt (ID integer, "DATE" DATE); 

Table created 

SQL> insert into tt values (1, null); 

1 row inserted 

SQL> update tt set "DATE" = sysdate where id = 1; 

1 row updated 

SQL> select * from tt; 

    ID DATE 
------ --------- 
    1 14-Apr-11 

SQL> 
+1

如果你遵循這條路徑,請注意,當你引用一個標識符時,它會在Oracle中區分大小寫。 「My_Column」和「MY_COLUMN」都指向同一列,「My_Column」和「」MY_COLUMN「」不。 – 2011-04-14 21:55:06

+1

我不會推薦遵循這條路徑。區分大小寫的標識符在很多級別上都很痛苦,而名爲保留字(如「DATE」或「INTEGER」)的列是一個糟糕的主意。 – DCookie 2011-04-14 22:24:30