String sql = "insert into T_EMPLOYER(NAME, SEX, NUMBER) VALUES(?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, name);
ps.setString(2, sex);
ps.setString(3, number);
// 報錯:java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] INSERT INTO 語句的語法錯誤。
字段名與 Access 保留字/關鍵字衝突:
NAME:可能衝突NUMBER:確定是保留字 (數據類型關鍵字)SEX:通常安全String sql = "insert into T_EMPLOYER([NAME], [SEX], [NUMBER]) VALUES(?,?,?)";
Access SQL 中使用 [] 包裹標識符,可區分保留字與用戶定義名。
-- 修改表結構
ALTER TABLE T_EMPLOYER RENAME COLUMN NUMBER TO EMP_NUMBER;
ALTER TABLE T_EMPLOYER RENAME COLUMN NAME TO EMP_NAME;
Java 代碼同步更新:insert into T_EMPLOYER(EMP_NAME, SEX, EMP_NUMBER) ...
不可用:Access 不支持 ` 轉義,僅支持 [] 或 "" (ANSI-92 模式)。
| 類別 | 關鍵字示例 |
|---|---|
| 數據類型 | NUMBER, TEXT, DATE, TIME, CURRENCY, MEMO, COUNTER, YESNO |
| 約束/索引 | PRIMARY, KEY, INDEX, UNIQUE, NULL, NOT, DEFAULT |
| 查詢操作 | SELECT, INSERT, UPDATE, DELETE, FROM, WHERE, JOIN, GROUP, ORDER, BY, AS |
| 系統/其他 | USER, PASSWORD, LEVEL, TABLE, VIEW, PROCEDURE, FUNCTION, MODULE |
完整列表參考:Microsoft 官方文檔
emp_name、emp_number、emp_sex,避開保留字同時提高可讀性。[]。[],或用工具檢查保留字衝突。Access INSERT INTO 語法錯誤 90% 由字段名與保留字衝突引起。最快修復是 SQL 中用 [字段名] 包裹;長遠治本是重命名字段加業務前綴。養成「標識符轉義」與「命名規範」雙重保障習慣,可避免此類低級錯誤。