您的位置:首页 > 数据库 > MySQL

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

2016-08-06 17:13 337 查看
文章转自: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql jdbc