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_KEYSconnection.prepareStatement()。但后来我在阅读此线程后意识到 Migration to Mysql Connector Jar 5.1.27 它不是 JBoss 升级问题,而是导致此错误的 mysql 连接器版本。 谁能指出我应该使用哪个版本的 mysql 连接器来阻止这些错误。因为文件数量很难增加Statement.RETURN_GENERATED_KEYS

谢谢

注意:有几种方法可以让驱动程序return生成密钥

  1. Connection.prepareStatement(字符串 sql, int autoGeneratedKeys)
  2. Connection.prepareStatement(String sql, int[] columnIndexes)
  3. Connection.prepareStatement(字符串 sql, 字符串[] columnNames)
  4. Statement.executeUpdate(字符串 sql, int autoGeneratedKeys)
  5. Statement.executeUpdate(String sql, int[] columnIndexes)
  6. 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()

,您应该始终使用上述方法之一