【发布时间】:2016-06-27 17:30:11
【问题描述】:
当我在表中执行插入操作时,我试图获取自动递增列的值。我正在使用sqlite。这是表格:
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;
}
问题在于它不返回我的 task_id 列的值,而是一个随着我所做的每次插入而递增的值。如果我已经完成了 9 次插入,然后将它们全部删除,那么下次我调用 add() 时它仍然会返回 10。即使我重新启动我的应用程序也会发生这种情况。知道我做错了什么吗?对于另一个表(列表),我还有另一种方法,其中我有几乎完全相同的代码。我刚刚看到在 add(List list) 之后调用 add(Task task) 方法时在列表表中创建了一个条目。
【问题讨论】:
-
你用什么jdbc驱动?
-
我使用 sqlite-jdbc 驱动。我真的很沮丧,因为我真的无法按预期工作。
标签: sql database sqlite sql-insert resultset