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
我试图在输入新行后获取自动递增的列。我的 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