我有一個表在我H2數據庫,其中存儲了一些有序列表更新的每一行:H2其索引號(0,1,2,3 ......)
CREATE TABLE IF NOT EXISTS items
(
f_id INTEGER NOT NULL PRIMARY KEY,
f_name VARCHAR(255) NOT NULL,
f_index INTEGER NOT NULL UNIQUE
)
|f_id|f_name|f_index|
|1 |A |1 |
|2 |C |3 |
|3 |B |4 |
|4 |D |2 |
當我刪除項目'D',我需要將C的索引更新爲2,將B的索引更新爲3.
而且,如果triyng要這樣做,我會很瘋狂。我不想簡單地
UPDATE items SET f_index = f_index-1 WHERE f_index > ?
因爲我怕我的表可以包含間隙(由不明原因引起的),所以我找了像
SqlRowSet rowSet = jdbcTemplate.queryForRowSet("SELECT f_name FROM items ORDER BY f_index");
int i = 0;
while (rowSet.next()) {
String name = rowSet.getString("f_name");
jdbcTemplate.update("UPDATE items SET f_index = ? WHERE f_name= ?", i++, name);
}
但更優雅。
有什麼辦法可以用H2來達到我的需求嗎?
什麼是F_索引到底是什麼?它只是桌子的PK嗎?如果是這樣,你不應該擔心更新它。 – nasukkin
爲什麼你需要更新f_index? – Guenther
@nasukkin我提供了CREATE TABLE sql – sinedsem