java.sql.SQLException: !Statement.GeneratedKeysNotRequested!

涉及的 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 這個版本。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章