H2 資料庫測試出現 JdbcSQLSyntaxErrorException
情境
這幾天在測試 H2 資料庫用於單元測試,寫了一個 LoginVaildation (可參考我的 Github 專案)。
其中創建了 schema.sql & data.sql 用於表的創建與資料的建置。
schema.sql
1 | CREATE TABLE USER ( |
data.sql
1 | INSERT INTO USER (EMAIL, PXSSWORD, USERNAME) VALUES ('willy4543@gmail.com', 'Demo1234', 'William'); |
執行後報出 JdbcSQLSyntaxErrorException
1 | Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "CREATE TABLE [*]USER ( EMAIL VARCHAR(30) PRIMARY KEY, PASSWORD VARCHAR(12), USER_NAME NVARCHAR(30) )"; expected "identifier"; |
原因
USER 在 H2 內雖然不是 Table 的保留字,但 USER 是一個保留的標誌符 (identifier),所以 H2 資料庫會把它當作當前登錄的用戶名稱。這就會導致指令出錯,拋出錯誤訊息告知在指令中出現了無效的標誌符。
解法
把 TABLE 的名稱從 USER 更改為 PROJECT_USER 即可。
有時候這種來自小小設定的問題,似乎也只在遇到的時候記得,簡單紀錄一下。