ORA-00928在oracle中缺少SELECT关键字

时间:2013-02-06 05:53:02

标签: java sql oracle jdbc prepared-statement

我正在使用以下代码插入数据。但我收到的错误为"ORA-00928: missing SELECT keyword"

try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
java.sql.Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@xxx.xxx.x.xxx:xxxx:xxxx", "xxxx", "xxxx");
String query="insert into offer1('RCODE','OFFERNO','DAT') values(?,?,?)"; 
    PreparedStatement ps=conn.prepareStatement(query);
    ps.setString(1,r_code);
    ps.setString(2,offerno);
    ps.setDate(3,sqlDate);
    ResultSet rs=ps.executeQuery();
    out.println("data inserted");
}catch(Exception e)
 {
     out.println(e);
 }

我在这段代码中看不到任何错误。如果有人发现,请说出错误是什么以及如何解决?

6 个答案:

答案 0 :(得分:7)

单引号仅用于标识符的字符串文字,因此您应该在columnNames周围删除它。

INSERT INTO offer1 (RCODE,OFFERNO,DAT) VALUES (?,?,?)

并使用executeUpdate,因为您没有检索导致结果集的记录。

来自 DOCS

布尔执行()

  • 在此PreparedStatement对象中执行SQL语句,该对象可以是任何类型的SQL语句。

ResultSet executeQuery ()

  • 在此PreparedStatement对象中执行SQL查询,并返回查询生成的ResultSet对象。

int executeUpdate ()

  • 在此PreparedStatement对象中执行SQL语句,该对象必须是SQL INSERT,UPDATE或DELETE语句;或者不返回任何内容的SQL语句,例如DDL语句。

答案 1 :(得分:5)

如果没有单引号,请尝试

String query="insert into offer1(RCODE,OFFERNO,DAT) values(?,?,?)"; 

答案 2 :(得分:2)

请试试这个

String query="insert into offer1(RCODE,OFFERNO,DAT) values(?,?,?)"; 

答案 3 :(得分:1)

尝试使用Statement.executeUpdate代替executeQuery

答案 4 :(得分:1)

ResultSet executeQuery()

在此PreparedStatement对象中执行SQL查询,并返回查询生成的ResultSet对象。

int executeUpdate()

在此PreparedStatement对象中执行SQL语句,该对象必须是SQL INSERT,UPDATE或DELETE语句;或者什么都不返回的SQL语句,例如DDL语句。

所以不使用ResultSet rs = ps.executeQuery();而是使用int result = ps.executeUpdate();

它返回INSERT,UPDATE或DELETE语句的行计数,或者返回0表示不返回任何内容的SQL语句

答案 5 :(得分:1)

我正在运行相同的问题,在我的情况下,查询是这样的:

insert into Address (number, street, id) values (?, ?, ?)

问题是由number列名引起的,因为number是Oracle中的保留关键字,例外是" ORA-00928:缺少SELECT关键字"。

因此,必须转义number列名称:

insert into Address ("number", street, id) values (?, ?, ?)

现在一切正常。