Linga
Linga

Reputation: 10573

ORA-00928 missing SELECT keyword in Oracle

I'm using the following code to insert data. But I'm receiving an error as "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);
 }

I can't see any errors in this code. If someone finds, please tell me what is the mistake and how to solve it?

Upvotes: 7

Views: 37444

Answers (6)

Vlad Mihalcea
Vlad Mihalcea

Reputation: 154030

I was running the same issue, and in my case the query was like this:

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

The problem was caused by the number column name since number is a reserved keyword in Oracle, and the exception was "ORA-00928: missing SELECT keyword".

So, the number column name must be escaped, like this:

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

and everything works fine now.

Upvotes: 2

Orangecrush
Orangecrush

Reputation: 1990

Without the single quotes, try

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

Upvotes: 6

user1999257
user1999257

Reputation:

ResultSet executeQuery()

Executes the SQL query in this PreparedStatement object and returns the ResultSet object generated by the query.

int executeUpdate()

Executes the SQL statement in this PreparedStatement object, which must be an SQL INSERT, UPDATE or DELETE statement; or an SQL statement that returns nothing, such as a DDL statement.

So instead of using ResultSet rs = ps.executeQuery(); use int result = ps.executeUpdate();

it returns either the row count for INSERT, UPDATE or DELETE statements, or 0 for SQL statements that return nothing

Upvotes: 1

yshavit
yshavit

Reputation: 43401

Try Statement.executeUpdate instead of executeQuery.

Upvotes: 1

John Woo
John Woo

Reputation: 263843

single quotes are for string literals not for identifiers only so you should remove it around the columnNames.

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

and use executeUpdate since you are not retrieving records which results a resultset.

from DOCS

boolean execute()

  • Executes the SQL statement in this PreparedStatement object, which may be any kind of SQL statement.

ResultSet executeQuery()

  • Executes the SQL query in this PreparedStatement object and returns the ResultSet object generated by the query.

int executeUpdate()

  • Executes the SQL statement in this PreparedStatement object, which must be an SQL INSERT, UPDATE or DELETE statement; or an SQL statement that returns nothing, such as a DDL statement.

Upvotes: 9

Madhav
Madhav

Reputation: 2415

Please try this

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

Upvotes: 2

Related Questions