7

我正在使用以下代码插入数据。但我收到一个错误"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);
 }

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

4

6 回答 6

9

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

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

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

来自文档

布尔执行()

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

结果集executeQuery ()

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

诠释执行更新()

  • 执行此 PreparedStatement 对象中的 SQL 语句,该语句必须是 SQL INSERT、UPDATE 或 DELETE 语句;或不返回任何内容的 SQL 语句,例如 DDL 语句。
于 2013-02-06T05:56:50.947 回答
6

没有单引号,试试

String query="insert into offer1(RCODE,OFFERNO,DAT) values(?,?,?)"; 
于 2013-02-06T05:54:14.613 回答
2

请试试这个

String query="insert into offer1(RCODE,OFFERNO,DAT) values(?,?,?)"; 
于 2013-02-06T05:56:00.437 回答
2

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

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

问题是由number列名引起的,因为number它是 Oracle 中的保留关键字,异常是“ORA-00928:缺少 SELECT 关键字”。

因此,number必须对列名进行转义,如下所示:

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

现在一切正常。

于 2016-04-27T08:57:14.187 回答
1

尝试Statement.executeUpdate代替executeQuery.

于 2013-02-06T05:56:58.823 回答
1
ResultSet executeQuery()

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

int executeUpdate()

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

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

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

于 2013-02-06T05:59:02.983 回答