我遇到一个问题,如果更改MySQL连接器Jar版本,我会遇到某些错误。 我的代码在JBoss 4.0.4.GA上运行良好。 然后我用连接器jar版本mysql-connector-java-5.1.36-bin将JBoss升级到Wildfly,并且没有对运行良好的代码进行任何更改。 现在每当我添加一些新行时,我都会收到错误消息,指出未生成密钥。
You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement().
Statement.RETURN_GENERATED_KEYS
添加到connection.prepareStatement()
。但后来我发现在阅读这个帖子Migration to Mysql Connector Jar 5.1.27之后它不是JBoss升级问题,而是mysql连接器版本导致了这个错误。
任何人都可以指出我应该使用哪个版本的mysql连接器来阻止这些错误。因为在文件数量中添加Statement.RETURN_GENERATED_KEYS
非常困难。
由于
答案 0 :(得分:0)
注意:有几种方法可以告诉驱动程序返回生成的密钥
来自Connection.prepareStatement(String sql, int autoGeneratedKeys)
创建一个默认的PreparedStatement对象,该对象具有检索自动生成的键的功能。给定的常量告诉驱动程序是否应该使自动生成的密钥可用于检索。如果SQL语句不是INSERT语句,或者能够返回自动生成的键的SQL语句(此类语句的列表是特定于供应商的),则忽略此参数。
不幸的是javadoc并不清楚当您致电Connection.prepareStatement(String sql)
时会发生什么。
据我所知,传递Statement.RETURN_GENERATED_KEYS
(或列名/索引)可以保证Statement.getGeneratedKeys()
将返回一个值。如果您没有明确要求,则无法保证getGeneratedKeys()
将返回值。
简而言之,为了符合JDBC规范,如果您打算调用Statement.getGeneratedKeys()