2013-02-06 145 views
3

我正在使用以下代码来插入数据。但我收到错误的"ORA-00928: missing SELECT keyword"ORA-00928在oracle中缺少SELECT关键字

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

我看不到这个代码的任何错误。如果有人发现,请告诉我们错在哪里以及如何解决?

+0

总共有两个问题,一个是删除列名的单引号,而不是使用'executeQuery()'使用'executeUpdate()'和更多的插入语句你期望的结果集。 –

回答

4

没有单引号,尽量

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

非常感谢。成功 –

+0

@ user2021114不客气!很高兴有帮助! ':)' – Orangecrush

+0

真正的解决方案当然是让数据库提供正确的错误信息,这只是一种解决方法。 – masterxilo

2

请试试这个

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

请详细解释一下! – Viru

7

单引号是字符串文字不是标识符只有那么你应该将其删除围绕COLUMNNAMES。

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

,并使用executeUpdate因为你没有检索这会导致一个结果集记录

DOCS

布尔执行()

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

结果集的executeQuery()

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

INT 的executeUpdate()

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

尝试Statement.executeUpdate而不是executeQuery

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语句

+0

http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html – Will

0

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

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

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

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

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

和现在的一切工作正常。