2

我有一个 Spring bean:

  • 使用 JdbcTemplate 将行插入 MySQL 5.6.12 表
  • 使用 MySQL last_insert_id( ) 函数检索插入行的 ID

ID 列定义为INT(10) UN AI PK

@Repository @Transactional
public class UserDao
{
    @Autowired JdbcTemplate jdbcTemplate;

    public User create( User u ) {

        String   sql  = "insert ...";
        Object[] args = new Object[] { ... };

        int mod = jdbcTemplate.update( sql, args );
        int key = jdbcTemplate.queryForObject( "select last_insert_id( )", Integer.class );

        ...

    }
}

数据库是一个 Amazon RDS 实例。当我从我的 Windows 开发框中执行给定的代码时,一切都很好。当我在 Ubuntu EC2 实例上部署具有相同连接字符串、池配置等的相同应用程序时,last_insert_id( )返回 0, always

我花了几个小时检查所有内容,我可以说事务正常工作,插入正常等等。在将所有内容扔出窗口之前,我用 and 替换了.update/.query序列.update( PreparedStatementCreator, KeyHolder )......在两种环境中都keyHolder.getKey( ).intValue( )可以正常工作。 ..

我真的不明白是什么问题,如果有人可以阐明...

软件栈,以防万一:spring-jdbc-3.2.3.RELEASE、bonecp-0.7.1.RELEASE、mysql-connector-java-5.1.25。两台机器上的 Java 7。

4

1 回答 1

0

也许尝试使用:mysql_insert_id()

于 2013-09-02T05:25:08.720 回答