我有一个表在我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