2016-02-19 61 views
0

我想在输入新行后获取自动递增的列。我在表中列出了以下列:SQL:从executeUpdate获取自动递增列的值

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

其中ID是一个自动递增的非空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的返回我的新行的行号,但我想要做的是从我的行号获得ID。

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

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

由于提前,

〜NonameSL

回答

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