MySQL连接器问题

时间:2015-09-15 08:26:48

标签: java mysql jboss mysql-connector

我遇到一个问题,如果更改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().

早些时候我认为这可能是因为服务器(JBoss)升级问题。我开始在每个代码中将Statement.RETURN_GENERATED_KEYS添加到connection.prepareStatement()。但后来我发现在阅读这个帖子Migration to Mysql Connector Jar 5.1.27之后它不是JBoss升级问题,而是mysql连接器版本导致了这个错误。 任何人都可以指出我应该使用哪个版本的mysql连接器来阻止这些错误。因为在文件数量中添加Statement.RETURN_GENERATED_KEYS非常困难。

由于

1 个答案:

答案 0 :(得分:0)

注意:有几种方法可以告诉驱动程序返回生成的密钥

  1. Connection.prepareStatement(String sql,int autoGeneratedKeys)
  2. Connection.prepareStatement(String sql,int [] columnIndexes)
  3. Connection.prepareStatement(String sql,String [] columnNames)
  4. Statement.executeUpdate(String sql,int autoGeneratedKeys)
  5. Statement.executeUpdate(String sql,int [] columnIndexes)
  6. Statement.executeUpdate(String sql,String [] columnNames)
  7. 来自Connection.prepareStatement(String sql, int autoGeneratedKeys)

    的javadoc
      

    创建一个默认的PreparedStatement对象,该对象具有检索自动生成的键的功能。给定的常量告诉驱动程序是否应该使自动生成的密钥可用于检索。如果SQL语句不是INSERT语句,或者能够返回自动生成的键的SQL语句(此类语句的列表是特定于供应商的),则忽略此参数。

    不幸的是javadoc并不清楚当您致电Connection.prepareStatement(String sql)时会发生什么。

    据我所知,传递Statement.RETURN_GENERATED_KEYS(或列名/索引)可以保证Statement.getGeneratedKeys()将返回一个值。如果您没有明确要求,则无法保证getGeneratedKeys()将返回值。

    简而言之,为了符合JDBC规范,如果您打算调用Statement.getGeneratedKeys()

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