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

SQL: Get value of auto incremented column from executeUpdate

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

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

其中 ID 是自动递增的,而不是 null mediumint。

我的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 returns 我的新行的行号,但我想做的是从我的行号中获取 ID。

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

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

提前致谢,

~ NonameSL

您可以在执行 INSERT 时获取生成的 ID,方法如下:

首先创建一个PreparedStatement,它return生成自动递增列的值:

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);

如果 table 中有多个 AUTO_INCREMENT 列,您还可以指定应 returned 的列:

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