我正在使用以下代码插入数据。但我收到的错误为"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);
}
我在这段代码中看不到任何错误。如果有人发现,请说出错误是什么以及如何解决?
答案 0 :(得分:7)
单引号仅用于标识符的字符串文字,因此您应该在columnNames周围删除它。
INSERT INTO offer1 (RCODE,OFFERNO,DAT) VALUES (?,?,?)
并使用executeUpdate
,因为您没有检索导致结果集的记录。
来自 DOCS
布尔执行()
ResultSet executeQuery ()
int executeUpdate ()
答案 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 (?, ?, ?)
现在一切正常。