Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取mysql中最后插入的自动增量id_Java_Mysql - Fatal编程技术网

Java 获取mysql中最后插入的自动增量id

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

我正在尝试像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_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”)。