MySQL 连接器问题
MySQL connector issues
我遇到一个问题,如果更改 MySQL 连接器 Jar 版本,我会收到某些错误。
我的代码在 JBoss 版本 4.0.4.GA 上很好地 运行。
然后我将 JBoss 升级到带有连接器 jar 版本 mysql-connector-java-5.1.36-bin 的 Wildfly,并且没有对 运行 的代码进行任何更改出色地。
现在,每当我添加一些新行时,我都会收到一条错误消息,指出未请求生成的密钥。
You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement().
之前我认为这可能是因为服务器(JBoss)升级问题。我开始在每个代码中添加 Statement.RETURN_GENERATED_KEYS
到 connection.prepareStatement()
。但后来我在阅读此线程后意识到 Migration to Mysql Connector Jar 5.1.27 它不是 JBoss 升级问题,而是导致此错误的 mysql 连接器版本。
谁能指出我应该使用哪个版本的 mysql 连接器来阻止这些错误。因为文件数量很难增加Statement.RETURN_GENERATED_KEYS
。
谢谢
注意:有几种方法可以让驱动程序return生成密钥
- Connection.prepareStatement(字符串 sql, int autoGeneratedKeys)
- Connection.prepareStatement(String sql, int[] columnIndexes)
- Connection.prepareStatement(字符串 sql, 字符串[] columnNames)
- Statement.executeUpdate(字符串 sql, int autoGeneratedKeys)
- Statement.executeUpdate(String sql, int[] columnIndexes)
- Statement.executeUpdate(字符串 sql, 字符串[] columnNames)
来自 Connection.prepareStatement(String sql, int autoGeneratedKeys)
的 javadoc
Creates a default PreparedStatement object that has the capability to retrieve auto-generated keys. The given constant tells the driver whether it should make auto-generated keys available for retrieval. This parameter is ignored if the SQL statement is not an INSERT statement, or an SQL statement able to return auto-generated keys (the list of such statements is vendor-specific).
不幸的是,javadoc 不清楚调用 Connection.prepareStatement(String sql)
时会发生什么。
据我所知,传递 Statement.RETURN_GENERATED_KEYS
(或 names/indexes 列)保证 Statement.getGeneratedKeys()
将 return 一个值。如果您没有明确要求,则无法保证 getGeneratedKeys()
会 return 值。
简而言之,为了符合 JDBC 规范,如果您打算调用 Statement.getGeneratedKeys()
,您应该始终使用上述方法之一
我遇到一个问题,如果更改 MySQL 连接器 Jar 版本,我会收到某些错误。 我的代码在 JBoss 版本 4.0.4.GA 上很好地 运行。 然后我将 JBoss 升级到带有连接器 jar 版本 mysql-connector-java-5.1.36-bin 的 Wildfly,并且没有对 运行 的代码进行任何更改出色地。 现在,每当我添加一些新行时,我都会收到一条错误消息,指出未请求生成的密钥。
You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement().
之前我认为这可能是因为服务器(JBoss)升级问题。我开始在每个代码中添加 Statement.RETURN_GENERATED_KEYS
到 connection.prepareStatement()
。但后来我在阅读此线程后意识到 Migration to Mysql Connector Jar 5.1.27 它不是 JBoss 升级问题,而是导致此错误的 mysql 连接器版本。
谁能指出我应该使用哪个版本的 mysql 连接器来阻止这些错误。因为文件数量很难增加Statement.RETURN_GENERATED_KEYS
。
谢谢
注意:有几种方法可以让驱动程序return生成密钥
- Connection.prepareStatement(字符串 sql, int autoGeneratedKeys)
- Connection.prepareStatement(String sql, int[] columnIndexes)
- Connection.prepareStatement(字符串 sql, 字符串[] columnNames)
- Statement.executeUpdate(字符串 sql, int autoGeneratedKeys)
- Statement.executeUpdate(String sql, int[] columnIndexes)
- Statement.executeUpdate(字符串 sql, 字符串[] columnNames)
来自 Connection.prepareStatement(String sql, int autoGeneratedKeys)
Creates a default PreparedStatement object that has the capability to retrieve auto-generated keys. The given constant tells the driver whether it should make auto-generated keys available for retrieval. This parameter is ignored if the SQL statement is not an INSERT statement, or an SQL statement able to return auto-generated keys (the list of such statements is vendor-specific).
不幸的是,javadoc 不清楚调用 Connection.prepareStatement(String sql)
时会发生什么。
据我所知,传递 Statement.RETURN_GENERATED_KEYS
(或 names/indexes 列)保证 Statement.getGeneratedKeys()
将 return 一个值。如果您没有明确要求,则无法保证 getGeneratedKeys()
会 return 值。
简而言之,为了符合 JDBC 规范,如果您打算调用 Statement.getGeneratedKeys()