使用 getGeneratedKeys() 插入时自动递增列的值 - 错误结果

Value of autoincremented column on insert using getGeneratedKeys() - wrong result

当我在 table 中执行插入时,我试图获取自动递增列的值。我正在使用 sqlite。这是 table:

CREATE TABLE `tasks` (
`task_id`   INTEGER,
`task_list_id`  INTEGER,
`task_name` VARCHAR(30),
`task_due_date` TIMESTAMP,
`task_created_date` TIMESTAMP,
`done`  BOOLEAN,
PRIMARY KEY(task_id),
FOREIGN KEY(`task_list_id`) REFERENCES `lists`(`list_id`)
);

这是我的插入方法:

public int add(Task task) throws Exception {
        PreparedStatement statement = null;
        try {
            String SQL = "INSERT INTO TASKS (TASK_LIST_ID, TASK_NAME, DONE, TASK_CREATED_DATE) VALUES (?, ?, ?, CURRENT_TIMESTAMP)";
            statement = jdbcTemplate.getDataSource().getConnection()
                    .prepareStatement(SQL, new String[]{ "task_id" });
            statement.setInt(1, task.getListId());
            statement.setString(2, task.getTaskName());
            statement.setBoolean(3, task.isDone());
            statement.executeUpdate();

            ResultSet generatedKeys = statement.getGeneratedKeys();
            if (generatedKeys.next()) {
                return (int)generatedKeys.getLong(1);
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new Exception("Failed to add Task to DB: " + task.toString());
        } finally {
            if (generatedKeys != null) {
                generatedKeys.close();
            }
            if (statement != null) {
                statement.close();
            }
        }
        return -1;
    }

问题是它不是 return 我的 task_id 列的值,而是一个随着我所做的每个插入而递增的值。如果我已经完成了 9 次插入,然后将它们全部删除,下次我调用 add() 时它仍将是 return 10。即使我重新启动我的应用程序,也会发生这种情况。知道我做错了什么吗?我还有另一种方法用于另一个 table (列表),其中我有几乎完全相同的代码。当我在 add(List list) 之后调用 add(Task task) 方法时,我刚刚看到在列表 table 中创建了一个条目。

SQLite 使用名为 "sqlite_sequence" 的内部 table 跟踪 table 曾经拥有的最大 ROWID。每当创建包含 AUTOINCREMENT 列的普通 table 时,都会自动创建和初始化 sqlite_sequence table。 sqlite_sequence table 的内容可以使用普通的 UPDATE、INSERT 和 DELETE 语句进行修改。但是对此 table 进行修改可能会扰乱 AUTOINCREMENT 密钥生成算法。在进行此类更改之前,请确保您知道自己在做什么。

取自SQLite docs