我使用的彈簧,它的JdbcTemplate的數據庫連接,我試圖自動爲我的主鍵列的關鍵。我也在使用HSQLDB
。該表看起來像這樣:的JdbcTemplate如何自動生成主鍵
CREATE TABLE IF NOT EXISTS Customers (
cid BIGINT GENERATED BY DEFAULT AS PRIMARY KEY,
name VARCHAR(255) NOT NULL,
...
);
在我的DAO對象的代碼看起來像這樣:
Map<String, Object> values = new HashMap<String, Object>();
values.put("name", customer.getName());
// NOT putting the cid
...
SimpleJdbcInsert insert = new SimpleJdbcInsert(jdbc).withTableName(
"CUSTOMERS").usingGeneratedKeyColumns("CID");
Long key = (Long) insert.executeAndReturnKey(values);
正如你所看到的,我不是手動把鑰匙,我想到的是,usingGeneratedKeyColumns
方法爲我自動生成它。反正我執行executeAndReturnKey
後出現此錯誤:
org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL []; integrity constraint violation: NOT NULL check constraint; SYS_PK_10094 table: CUSTOMERS column: CID; nested exception is java.sql.SQLIntegrityConstraintViolationException: integrity constraint violation: NOT NULL check constraint; SYS_PK_10094 table: CUSTOMERS column: CID
爲什麼要這麼做?讓你的數據庫使用自動增量生成密鑰。 – Stultuske