SQL:从executeUpdate获取自动递增列的值

时间:2016-02-19 13:41:39

标签: java mysql sql jsp resultset

我在输入新行后尝试获取自动递增的列。我的表中有以下列:

+----+---------+---------+-------+------------+--------------+------------+---------------+-----------+
| ID | Minkita | Maxkita | Meser | MetodasNum | MainQuestion | MetodaData | RequiresZiood | Nispachim |
+----+---------+---------+-------+------------+--------------+------------+-----

其中ID是自动递增的,非空的中等。

我的 JSP 代码:

PreparedStatement s = connection.prepareStatement(
            "INSERT INTO Threads"
            +"(`MinKita`, `MaxKita`, `Meser`, `MetodasNum`, `MainQuestion`, `MetodaData`, `RequiresZiood`, `Nispachim`)"
            +" VALUES(?, ?, ?, ?, ?, ? ,? ,?)"
);
//Blah blah, setting strings and values for the prepared statement... Then:
s.executeUpdate();

现在,我知道executeUpdate返回我的新行的行号,但我想要做的是从我的行号中获取ID。

问题是,ID不一致,它们可能是这样的顺序:1, 2, 5, 7, 13...因为行可能会被删除。

那么,如何从行号中获取ID列中的数据?

提前致谢,

~NonameSL

1 个答案:

答案 0 :(得分:1)

使用以下内容执行INSERT时,您可以获取生成的ID:

首先创建一个PreparedStatement,它确实返回自动增量列的生成值:

PreparedStatement s = connection.prepareStatement(
    "INSERT INTO <your sql>",
    Statement.RETURN_GENERATED_KEYS);

执行完该语句后,您可以按如下方式检索ID:

s.executeUpdate();
ResultSet result = stmt.getGeneratedKeys();
if (result.next())
     id = result.getObject(1);

如果表中有多个AUTO_INCREMENT列,您还可以指定应返回的列:

PreparedStatement s = connection.prepareStatement(
    "INSERT INTO <your sql>",
    new String[] { "ID" });  // the ID column only