`
san_yun
  • 浏览: 2639410 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

如何正确获取last_insert_id

    博客分类:
  • jdbc
 
阅读更多

今天尝试通过

select last_insert_id()

 来获取last insert id,但客户端打点发现结果不对:

lastrowid= 111654761    INSERT INTO `message_message2tag` (`tag_id`, `message_id`) VALUES (?, ?)
lastrowid= 111654762    INSERT INTO `message_message2tag` (`tag_id`, `message_id`) VALUES (?, ?)
lastrowid= 111654763    INSERT INTO `message_message2tag` (`tag_id`, `message_id`) VALUES (?, ?)
lastrowid= 111654764    INSERT INTO `message_message2tag` (`tag_id`, `message_id`) VALUES (?, ?)
lastrowid= 38968438    INSERT INTO `search_needtoindex` (`oid`, `otype`, `is_delete`) VALUES (?, ?, ?)
lastrowid= 38968438    INSERT INTO `message_messagecontent` (`id`, `msg`) VALUES (?, ?)
lastrowid= 94356472    INSERT INTO `mblog_star` (`user_id`, `count`, `object_id`, `add_datetime`, `category`) VALUES (?, ?, ?, ?, ?)
lastrowid= 94356473    INSERT INTO `mblog_star` (`user_id`, `count`, `object_id`, `add_datetime`, `category`) VALUES (?, ?, ?, ?, ?)
lastrowid= 63628816    INSERT INTO `broadcast_status` (`user_id`, `object_id`, `add_datetime`, `category`) VALUES (?, ?, ?, ?)
remote gfw http://192.168.172.9:7788/fdb/match/ taking 5 ms at 04-06 22:03:09
lastrowid= 71250683    INSERT INTO `message_message` (`recipient_id`, `sender_id`, `group_id`, `album_id`, `parent_id`, `reply_count`, `favorite_count`, `like_count`, `flag`, `last_replied_datetime`, `add_datetime`, `gmt_updated`, `buyable`, `photo_id`, `status`, `category`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

尝试使用spring jdbc GeneratedKeyHolder
KeyHolder keyHolder = new GeneratedKeyHolder();
            writeJdbc.update(new PreparedStatementCreator() {

                @Override
                public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
                    PreparedStatement ps = con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
                    for (int i = 0; i < params.length; ++i) {
                        ps.setObject(i + 1, params[i]);
                    }
                    return ps;
                }

            }, keyHolder);

            return keyHolder.getKey().longValue();
 
分享到:
评论

相关推荐

    Mysql中LAST_INSERT_ID()的函数使用详解

    在MySQL数据库中,LAST_INSERT_ID()函数是一个非常实用的工具,尤其在处理多表关联或者需要获取最新插入记录的自增ID时。该函数的主要作用是返回最近一次执行的INSERT或UPDATE语句对具有AUTO_INCREMENT属性的列所...

    轻松掌握MySQL函数中的last_insert_id()

    在MySQL中,`last_insert_id()` 是一个非常有用的函数,它允许我们获取最后一条INSERT操作自动生成的ID值。这个函数通常与具有自动增长特性的主键字段一起使用,例如INT类型的`id`字段,当插入新记录时,MySQL会自动...

    MYSQL 小技巧 — LAST_INSERT_ID

    在MySQL数据库操作中,了解如何正确获取最新插入记录的ID是一项重要的技能,特别是当你需要在事务处理或多线程环境中确保数据一致性时。标题提到的"MYSQL 小技巧 — LAST_INSERT_ID"着重讨论了MySQL中获取自增ID的两...

    MYSQL 小技巧 -- LAST_INSERT_ID

    MySQL数据库管理系统中,LAST_INSERT_ID() 函数和 mysql_insert_id() 函数都可以用来获取最近一次INSERT操作生成的自增ID值。在PHP开发中,正确地使用这两个函数对于确保数据一致性及避免并发问题至关重要。本知识...

    解决Hibernate JPA中insert插入数据后自动执行select last_insert_id()

    在使用Hibernate JPA进行数据操作时,我们可能会遇到一个特定的情况,即在执行完插入(insert)操作后,系统会自动执行一个`select last_insert_id()`的查询来获取刚刚生成的自增主键值。这个问题在Spring MVC集成...

    PHP获取MySql新增记录ID值的3种方法

    这意味着即使有多个用户同时操作,每个用户也能正确地获取到自己的新插入记录的ID。但是,需要注意的是,`mysql_insert_id()`在处理`bigint`类型的ID时可能存在兼容性问题。 3. **使用MySQL的`LAST_INSERT_ID()`...

    mysql中实现sequence.pdf

    为了确保正确获取这个ID,你需要确保`LAST_INSERT_ID()`函数和`INSERT`操作在同一个数据库连接(Connection)中执行,以保证它们在一个事务内。 在Java JDBC中,通常会将`INSERT`操作和获取`LAST_INSERT_ID()`放在...

    解析sql中得到刚刚插入的数据的id

    总结来说,`LAST_INSERT_ID()`和`@@IDENTITY`是两种用于获取新插入数据ID的方法,它们分别适用于MySQL和SQL Server。在设计和编写数据库操作的代码时,理解这些函数的工作原理以及它们在并发环境中的行为是非常重要...

    获取插入记录ID(2.0)

    在执行插入操作后,我们需要获取这个新生成的ID以便后续处理。 在C#中,我们可以使用ADO.NET库来连接和操作数据库。以下是一个简单的步骤说明: 1. **建立数据库连接**:首先,你需要创建一个SqlConnection对象,...

    Mysql(序列/ID)生成方案

    当多个并发线程尝试获取新的ID时,每个线程都会锁定表中的特定行,然后通过`LAST_INSERT_ID()`获取当前的ID并增加它。这样可以确保在并发情况下ID的唯一性和顺序性。不过,这种方法需要谨慎使用,因为它可能会增加锁...

    PHP 取得刚插入数据的ID.rar

    如果你使用的是MySQLi扩展来连接MySQL数据库,可以使用`mysqli_insert_id()`函数来获取最后插入行的ID。这个函数会返回与当前连接相关的最后一个自动递增ID。例如: ```php $conn = new mysqli("localhost", ...

    php获得刚插入数据的id 的几种方法总结

    在进行数据库操作时,确保正确获取新插入数据的ID对于保持数据一致性至关重要。合理使用上述方法,可以有效地避免数据混乱,提高应用程序的稳定性和可靠性。同时,了解这些方法的限制和适用场景,有助于编写更健壮的...

    MySQL自学文档第三周

    总结来说,MySQL的自动增长特性与SQL Server有所不同,它需要与主键结合使用,并提供了`last_insert_id()`函数来获取最近插入记录的自动增长ID。在插入数据时,我们可以灵活地处理自动增长字段,包括设置默认值、...

    ASP技术常遇问题解答-如何得到插入一条记录后最新的ID?.zip

    当使用SQL Server作为数据库时,`SCOPE_IDENTITY()`函数是获取最后由同一作用域内的INSERT语句生成的自动递增ID的最常见方法。它返回的是在同一事务或批处理中插入的最后一条记录的ID,确保了返回值的唯一性。 2. ...

Global site tag (gtag.js) - Google Analytics