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を生成するレコードを取得していないため、使用します。

DOCSから

ブール実行()

  • このPreparedStatementオブジェクトでSQLステートメントを実行します。これは任意の種類のSQLステートメントです。

ResultSet executeQuery()

  • このPreparedStatementオブジェクトでSQLクエリを実行し、クエリによって生成されたResultSetオブジェクトを返します。

int executeUpdate()

  • このPreparedStatementオブジェクトのSQLステートメントを実行します。これはSQLINSERT、UPDATE、またはDELETEステートメントである必要があります。または、DDLステートメントなどの何も返さないSQLステートメント。
于 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 (?, ?, ?)

この問題は、Oracleで予約されているキーワードであるnumberため、列名が原因で発生しましnumberた。例外は「ORA-00928:SELECTキーワードがありません」でした。

したがって、次のnumberように列名をエスケープする必要があります。

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

そして今はすべてうまくいきます。

于 2016-04-27T08:57:14.187 に答える
1
ResultSet executeQuery()

このPreparedStatementオブジェクトでSQLクエリを実行し、クエリによって生成されたResultSetオブジェクトを返します。

int executeUpdate()

このPreparedStatementオブジェクトのSQLステートメントを実行します。これはSQLINSERT、UPDATE、またはDELETEステートメントである必要があります。または、DDLステートメントなどの何も返さないSQLステートメント。

ResultSet rs = ps.executeQuery();したがって、 use int result = ps.executeUpdate();を使用する代わりに

INSERT、UPDATE、またはDELETEステートメントの場合は行数を返します。何も返さないSQLステートメントの場合は0を返します。

于 2013-02-06T05:59:02.983 に答える
1

Statement.executeUpdateの代わりに試してくださいexecuteQuery

于 2013-02-06T05:56:58.823 に答える