2011-11-25 16 views
8

當我嘗試將某些行插入數據庫時​​,出現錯誤。所以這裏是數據庫的代碼java.sql.SQLException:ORA-00928:缺少SELECT關鍵字。當使用JDBC將記錄插入到數據庫時

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類型,雙重檢查的列(它們都是相同的名字),拿出了引號斷列名(相同的結果)沒有成功。添加它,錯誤信息不是很有幫助。

任何建議,將不勝感激。

+3

嘗試不帶引號(應該是雙引號如果有的話),但沒有尾隨分號,並與前'values'的空間。 – Thilo

+4

RECORD_COUNT和VALUES之間沒有空格(所以你的插入命令看起來像'INSERT into MY_TABLE(......)VALUES(????)' – Kal

+3

我認爲你總是需要使用double引號,因爲DATE通常是一個無效的標識符(這就是爲什麼你不應該把它用作列名,而且爲什麼它存儲爲一個字符串?) –

回答

3

我可以發現兩個問題:

  1. 無需左右列名的單引號。但是你可以用雙引號包裝它。如果您對列名或表名使用保留關鍵字,則這是必要的。這裏DATE
  2. 您需要VALUES之前的空間。

所以,你需要改變insertStmt到財產以後這樣的:

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

閱讀OP和標題 - 全部關於** oracle **。 – adatapost

+0

@AVD編輯答案,並感謝指出 – Jomoos

2

在Console中打印insertStmt字符串並嘗試直接在後端觸發它。它在後臺給你確切的錯誤。它會檢測到一些間距或語法錯誤。

+1

是的,我試圖從數據庫IDE插入記錄,並知道有一些語法錯誤。感謝jwalin的回答。欣賞它 –

+0

歡迎隨時simon .. –

4

您需要更改SQL聲明。 (不要使用保留字用作標識符)

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

使用"(雙引號),以逃避保留字/關鍵字。

+0

嘿人,我正要在這裏回答。是的,日期列需要用雙引號括起來然後轉義。謝謝你的回答:D:D:D –

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 
    (?, ?, ?, ?, ?, ?, ?, ?, ?) 
0

對於其他人搜索同樣的錯誤:與查詢其他語法問題可能會導致相同的異常被拋出。例如,省略單詞VALUES。

0

我跑同樣的問題,在我的情況下,查詢是這樣的:

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

的問題是由number列名,因爲number造成的是Oracle保留關鍵字,而例外是有點誤導ORA-00928: missing SELECT keyword

逃避number列後,該語句正常執行:

insert into Address ("number", street, id) values (?, ?, ?) 
相關問題