MySQL的新版JDBC驱动(5.1.7)一个超级恶心的问题

文章转自:http://www.oschina.net/question/12_106

——————————————————-分割线——————————————————-

涉及的 MySQL Connector/J 的版本是MySQL网站上提供的最新的 5.1.7 这个版本。

问题是这样的,假设表中有自动增长的字段id,我们在插入数据的时候,可以通过 ResultSet rs = ps.getGeneratedKeys() 这样的代码来获取到所插入数据产生的id值。这个方法在 5.1.7 之前的任何一个版本都是可行的,但在 5.1.7 这个版本就会抛出一个异常:

java.sql.SQLException: !Statement.GeneratedKeysNotRequested!

也就是相当于几乎所有的插入语句都会出错,昨天晚上我更新了 oschina 的 jdbc 驱动到 5.1.7 这个版本,就没有测试数据的插入,结果早上发布数据的时候出现了上面这个提示。

在 MySQL 网站上查到了这个问题的bug说明,在 5.1.7 版本的驱动中,如果要使用 getGeneratedKeys 这个方法的前提是你不能使用 PreparedStatement ,而必须用 Statement 来替代,而且还要增加一个参数如下:

Statement stmt =connection.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.executeUpdate("INSERT INTO table values(1,2)",Statement.RETURN_GENERATED_KEYS);
ResultSet rs = stmt.getGeneratedKeys(); //This works

这简直是扯淡嘛!!!所以唯一的解决办法就是不要用 5.1.7 这个版本。

关于这个问题的bug说明请看:http://bugs.mysql.com/bug.php?id=41448

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值