Spring   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在Spring中用select last_insert_id()时遇到问题大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

今天在使用MysqL时却不知如何处理,插入记录后不知怎样获得刚刚插入的id,查过文档后发现了SELEct last_insert_id(),在插入后执行查询,即可获得自增id,喜出望外。
可用到自己的程序中之后却得不到想要的结果,于是就怀疑到了Spring头上,因为通过基本JDBC测试是没有任何问题的,所以就去跟踪Spring JDBC,看过源码之后才豁然开朗,原来Spring中如此获得数据库Connection的:Connectioncon=DatasourceUtils.getConnection(getDatasource());,哎,只能怪自己Spring掌握不够好,所以就不能在执行INSERT之后去执行SELEct last_insert_id()了,因为SELEct last_insert_id()是真对当前Connection插入和更新操作的,那在Spring中如何获得新增记录的键值呢,没有办法只能去Google了。发现了如下文章,来自IT168,标题为《Spring应用数据主键的生成策略盘点》,摘录如下:
在一般情况下,在新增领域对象后,都需要获取对应的主键值。使用应用层来维护主键,在一定程度上有利于程序性能的优化和应用移植性的提高。在采用数据库自增主键的方案里,如果JDBC驱动不能绑定新增记录对应的主键,就需要手工执行查询语句以获取对应的主键值,对于高并发的系统,这很容易返回错误的主键。通过带缓存的@L_160_13@maxValueIncrementer,可以一次获取批量的主键值,供多次插入领域对象时使用,它的执行性能是很高的。

使用数据库的自增主键


我们经常使用数据的自增字段作为表主键,也即主键值不在应用层产生,而是在新增记录时,由数据库产生。这样,应用层在保存对象前并不知道对象主键值,而必须在保存数据后才能从数据库中返回主键值。在很多情况下,我们需要获取新对象持久化后的主键值。在Hibernate等ORM框架,新对象持久化后,Hibernate会自动将主键值绑定到对象上,给程序的开发带来了很多方便 在JDBC 3.0规范中,当新增记录时,允许将数据库自动产生的主键值绑定到Statement或PreparedStatement中。使用Statement时,可以通过以下方法绑定主键值:
int executeupdate(String sql,int autoGeneratedKeys)
也可以通过Connection创建绑定自增值的PreparedStatement:
PreparedStatement prepareStatement(String sql,int autoGeneratedKeys) 当autoGeneratedKeys参数设置为Statement.RETURN_GENERATED_KEYS值时即可绑定数据库产生的主键值,设置为Statement.NO_GENERATED_KEYS时,不绑定主键值。下面的代码演示了Statement绑定并获取数据库产生的主键值的过程:

<DIV style="BACKGROUND-COLOR: rgb(102,255,255)"><SPAN style="COLOR: rgb(0,0)">Statement stmt <SPAN style="COLOR: rgb(0,0)">= <SPAN style="COLOR: rgb(0,0)">conn.createStatement(); String sql <SPAN style="COLOR: rgb(0,0)">"<SPAN style="COLOR: rgb(0,0)">INSERT INTO t_topic(topic_title,user_id) VALUES(‘测试主题','123') <SPAN style="COLOR: rgb(0,0)">; stmt.executeupdate(sql,Statement.RETURN_GENERATED_KEYS); ①指定绑定表自增主键值 ResultSet rs <SPAN style="COLOR: rgb(0,0)">stmt.getGeneratedKeys(); <SPAN style="COLOR: rgb(0,0)">if <SPAN style="COLOR: rgb(0,0)">( rs.next() ) { <SPAN style="COLOR: rgb(0,0)">int <SPAN style="COLOR: rgb(0,0)">key <SPAN style="COLOR: rgb(0,0)">rs.geTint();获取对应的表自增主键值 }

大佬总结

以上是大佬教程为你收集整理的在Spring中用select last_insert_id()时遇到问题全部内容,希望文章能够帮你解决在Spring中用select last_insert_id()时遇到问题所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:select