Java 获取mysql中最后插入的自动增量id
我正在尝试像mysql_insert_id()一样获取mysql命令;检索最后插入的行的自动增量id。在Java中如何获取它Java 获取mysql中最后插入的自动增量id,java,mysql,Java,Mysql,我正在尝试像mysql_insert_id()一样获取mysql命令;检索最后插入的行的自动增量id。在Java中如何获取它 rs = st.executeQuery("select last_insert_id() from schedule"); lastid = rs.getString("last_insert_id()"); 我的lastid被声明为INT。我不知道在rs.get中使用什么,也不知道参数。尝试使用别名 rs = st.executeQuery("select last
rs = st.executeQuery("select last_insert_id() from schedule");
lastid = rs.getString("last_insert_id()");
我的lastid被声明为INT。我不知道在rs.get中使用什么,也不知道参数。尝试使用别名
rs = st.executeQuery("select last_insert_id() as last_id from schedule");
lastid = rs.getString("last_id");
为什么不呢
SELECT MAX(id) FROM schedule
如果id您的列的名称与id
不同,则需要在上述查询中相应地替换它
您可以像这样使用它:
rs = st.executeQuery("SELECT MAX(id) AS id FROM schedule");
int lastid = rs.getInt("id");
使用JDBC,您可以使用方法
PreparedStatement pstmt = conn.prepareStatement(Query, Statement.RETURN_GENERATED_KEYS);
pstmt.executeUpdate();
ResultSet keys = pstmt.getGeneratedKeys();
keys.next();
key = keys.getInt(1);
有关答案和解释,请参阅帖子
Statement stmt = db.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
numero = stmt.executeUpdate();
ResultSet rs = stmt.getGeneratedKeys();
if (rs.next()){
risultato=rs.getInt(1);
}
您可以使用以下查询来获取上次插入行的最后一个自动递增ID
SELECT (max(auto_incr_id)) from table_name;
另一种选择:
根据id DESC LIMIT 1从表\u name ORDER中选择id代码>我想不起来了。。哈哈。。上次使用mysql_insert_id()进行PHP时;,突然切换到java,所以我只关注它。谢谢你的建议。:)<代码>int lastid=rs.getInt(“id”)代码>将抛出错误,因为id
不存在。您应该首先在select语句中添加别名<代码>rs=st.executeQuery(“从计划中选择最大(id)id”)代码>@JW。谢谢你的提示。更新了我的答案。你不应该依赖max(id),因为另一个线程可以在你的insert和select语句之间插入新行,你会得到错误的id。是的,同样适用于mysql_inserted_id和last_inserted_id函数,这也可能由于其他线程上的竞争条件而导致问题,特别考虑到web应用程序通常共享同一个数据库用户,我尝试了这种方法,但它总是返回1。我不知怎的认为这是为了检查它是否在数据库中插入了任何查询?@Maki92我真的不理解你的评论。这段代码只返回表中最后一个自动递增的id。顺便说一句,ASAIK这是使用JDBC的标准方法。我见过人们使用它,但他们面临着和我一样的问题。代码总是从表中返回1。@Maki92我很确定这是他们代码中的一个问题。我自己使用它,从未真正面对过这样的问题:)我有确切的问题。不管实际索引是什么,它总是返回1。为什么要添加FROM语句?这是有害的,因为如果您的表包含2行,那么结果将得到2行。“选择LAST_INSERT_ID();”就足够了。您可以调用rs.getString(1)而不是rs.getString(“LAST_ID”)。