8

いくつかの行をデータベースに挿入しようとすると、エラーが発生します。これがコードです

try {
    String insertStmt = "INSERT into " +
                        "MY_TABLE('RECORD_TYPE', 'FILE_TYPE', 'DATE', 'BATCH_NO', 'RECORD_COUNT')" +
                        "VALUES(?, ?, ?, ?, ?);";

    PreparedStatement pstmt = super.con.prepareStatement(insertStmt);

    pstmt.setString(1, input[0]);
    pstmt.setString(2, input[1]);
    pstmt.setString(3, input[2]);
    pstmt.setString(4, input[3]);
    pstmt.setString(5, input[4]);

    System.out.println("Insert rows : " + pstmt.executeUpdate());

} catch (SQLException sqle) {
    System.out.println(sqle.getMessage());
    sqle.printStackTrace();
} catch (Exception e) {
    System.out.println(e.getMessage());
    e.printStackTrace();
} finally {
    con.close();
}

そして、データベース上のすべてがvarchar型であり、列を再確認し(すべて同じ名前です)、列名から引用符を削除しました(同じ結果)。成功しませんでした。合計すると、エラーメッセージはあまり役に立ちません。

任意の提案をいただければ幸いです。

4

6 に答える 6

5

SQLステートメントを変更する必要があります。(予約語を識別子として使用しないでください)

String insertStmt = "INSERT into \"MY_TABLE\" (RECORD_TYPE,FILE_TYPE, 
              \"DATE\",BATCH_NO,RECORD_COUNT) VALUES (?, ?, ?, ?, ?)";

(二重引用符)を使用"して、予約語/キーワードをエスケープします。

于 2011-11-25T05:00:22.097 に答える
4

私は2つの問題を見つけることができます:

  1. 列名を一重引用符で囲む必要はありません。ただし、二重引用符で囲むことができます。列名またはテーブル名に予約済みキーワードを使用している場合に必要です。ここDATEに。
  2. の前にスペースが必要ですVALUES

insertStmtしたがって、次のようなものに変更する必要があります。

String insertStmt = "INSERT into " +
    "MY_TABLE(RECORD_TYPE, FILE_TYPE, \"DATE\", BATCH_NO, RECORD_COUNT) " +
    "VALUES(?, ?, ?, ?, ?);";
于 2011-11-25T05:05:06.207 に答える
2

ConsoleでinsertStmtStringを出力し、直接バックエンドで起動してみてください。バックエンドで正確なエラーが発生します。間隔や構文エラーが発生します。

于 2011-11-25T04:43:40.033 に答える
1

ORA-00928を検索しているときにこのページにアクセスしましたが、問題は列リストの先頭にある余分なコンマでした。

INSERT INTO redacted.redacted
  (
  , redacted_id   -- The comma at the start of this line will trigger ORA-00928.
  , another_redacted_id
  , redacted1
  , redacted2
  , redacted3
  , created_at
  , created_by
  , changed_at
  , changed_by
  )
  VALUES
  (?, ?, ?, ?, ?, ?, ?, ?, ?)
于 2012-10-01T21:48:19.657 に答える
0

同じエラーを検索している他の人の場合:クエリに関する他の構文上の問題により、同じ例外がスローされる可能性があります。たとえば、VALUESという単語を省略します。

于 2015-02-06T16:59:29.837 に答える
0

私は同じ問題を実行していましたが、私の場合、クエリは次のようになりました。

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

この問題は、Oracleで予約されているキーワードであるため、number列名が原因で発生しました。例外は、誤解を招くようなものでした。numberORA-00928: missing SELECT keyword

列をエスケープした後number、ステートメントは正常に実行されました。

insert into Address ("number", street, id) values (?, ?, ?)
于 2016-04-27T08:58:31.470 に答える