2011-04-14 114 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