我在输入新行后尝试获取自动递增的列。我的表中有以下列:
+----+---------+---------+-------+------------+--------------+------------+---------------+-----------+
| 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
答案 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