zoukankan      html  css  js  c++  java
  • MySQL问题记录——getGeneratedKeys

    MySQL问题记录——getGeneratedKeys

    摘要:本文主要记录了新增记录并获取自增主键时出现的原因及解决办法。

    问题重现

    在使用JdbcTemplate尝试新增一条记录并获取自增主键时,系统后台报错了。

    代码:

     1 String sql = "insert into bs_book(title, author) values(?, ?)";
     2 KeyHolder keyHolder = new GeneratedKeyHolder();
     3 jdbcTemplate.update(new PreparedStatementCreator() {
     4     @Override
     5     public PreparedStatement createPreparedStatement(Connection con)
     6             throws SQLException {
     7         PreparedStatement prepareStatement = con.prepareStatement(sql);
     8         prepareStatement.setString(1, "平凡的世界");
     9         prepareStatement.setString(2, "路遥");
    10         return prepareStatement;
    11     }
    12 }, keyHolder);
    13 System.out.println("id=" + keyHolder.getKey().intValue());

    MySQL的驱动为5.1.7版本的报错信息:

    1 Caused by: java.sql.SQLException: !Statement.GeneratedKeysNotRequested!

    MySQL的驱动为5.1.7以后的版本的报错信息:

    1 Caused by: java.sql.SQLException: Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement().

    解决办法

    在使用Connection获取PreparedStatement的时候,同时传入一个常量参数:

    1 PreparedStatement prepareStatement = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

    问题说明

    MySQL的驱动版本在5.1.7之前是不会报这个异常的,在5.1.7及以后的版本中,如果要使用PreparedStatement对象的getGeneratedKeys()方法获取插入的主键,就必须要在使用Connection获取PreparedStatement的时候传入一个常量,否则就会报错。

    在5.1.7版本中报错:

    1 Caused by: java.sql.SQLException: !Statement.GeneratedKeysNotRequested!

    在5.1.7以后的版本中报错:

    1 Caused by: java.sql.SQLException: Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement().
  • 相关阅读:
    【死磕Java并发】—–J.U.C之AQS(一篇就够了)
    Java并发包基石-AQS详解
    java并发api总结
    用Java对CSV文件进行读写操作
    多线程批量检测未注册域名
    RSA公钥、私钥、签名和验签
    ASCII,Unicode和UTF-8终于找到一个能完全搞清楚的文章了
    Java 常用工具类---- 各种字符集编码判断与转换
    JavaMail| JavaMail配置属性
    QT下的几种透明效果(QPalette背景白色,窗口设置setWindowOpacity,QPainter使用Clear模式绘图)
  • 原文地址:https://www.cnblogs.com/shamao/p/13219323.html
Copyright © 2011-2022 走看看