Java MySQL连接器问题

Java MySQL连接器问题,java,mysql,jboss,mysql-connector,Java,Mysql,Jboss,Mysql Connector,我面临一个问题,如果更改MySQL连接器Jar版本,我会遇到某些错误。 我的代码在JBoss版本4.0.4.GA上运行良好。 然后我用连接器jar版本mysql-connector-java-5.1.36-bin将JBoss升级到Wildfly,并且没有对运行良好的代码进行任何更改。 现在,每当我添加一些新行时,我都会收到一个错误,表示生成的键未被请求 您需要指定Statement.RETURN\u生成的\u键到Statement.executeUpdate()或Connection.prepa

我面临一个问题,如果更改MySQL连接器Jar版本,我会遇到某些错误。 我的代码在JBoss版本4.0.4.GA上运行良好。 然后我用连接器jar版本mysql-connector-java-5.1.36-bin将JBoss升级到Wildfly,并且没有对运行良好的代码进行任何更改。 现在,每当我添加一些新行时,我都会收到一个错误,表示生成的键未被请求

您需要指定Statement.RETURN\u生成的\u键到Statement.executeUpdate()或Connection.prepareStatement()。

之前我认为这可能是因为服务器(JBoss)升级问题。我开始在每个代码中添加
语句。将生成的\u键返回到
connection.prepareStatement()
。但在阅读了这个线程之后,我意识到这不是JBoss升级问题,而是mysql连接器版本导致了这个错误。 有谁能告诉我应该使用哪个版本的mysql连接器来停止这些错误吗。因为添加
语句非常困难。返回\u生成的\u键


谢谢注意:有几种方法可以告诉驾驶员返回生成的钥匙

  • Connection.prepareStatement(字符串sql,int自动生成键)
  • Connection.prepareStatement(字符串sql,int[]columnIndexes)
  • Connection.prepareStatement(字符串sql,字符串[]列名)
  • 语句.executeUpdate(字符串sql,int自动生成键)
  • 语句.executeUpdate(字符串sql,int[]columnIndexes)
  • 语句.executeUpdate(字符串sql,字符串[]列名)
  • 从javadoc获取
    Connection.prepareStatement(字符串sql,int autoGeneratedKeys)

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

    不幸的是,当您调用
    Connection.prepareStatement(字符串sql)
    时,不清楚会发生什么

    据我所知,传递
    Statement.RETURN\u GENERATED\u KEYS
    (或列名/索引)可以保证
    Statement.getGeneratedKeys()
    将返回一个值。如果未明确请求,则无法保证
    getGeneratedKeys()
    将返回值


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

    @a\u horse\u with\u no\u name你能给我一些见解吗?谁能告诉我应该添加
    语句。在每个文件中返回生成的\u键
    ,还是有其他方法摆脱这个问题?如果我调用
    Connection.prepareStatement(String sql)
    ,那么这就是非法使用JDBC吗?不,这不是。。。99%的时候你可以愉快地使用这种方法。但是,如果您希望
    语句.getGeneratedKeys()
    返回一个值,那么您应该(必须)使用我上面提到的方法之一。实际上,问题是在升级到JBoss之前,我的代码运行得非常好。然后我将它升级到wildfly,并使用驱动程序mysql-connector-java-5.1.36-bin,它失败了,出现了这样的错误。我的意思是问,这是因为连接器驱动程序吗?这不是由jboss升级引起的,几乎100%确定这是由驱动程序升级引起的。我认为,在从
    getGeneratedKeys()
    获得结果之前,如果没有明确指定
    RETURN\u GENERATED\u KEYS
    ,您是幸运的,您永远不应该依赖这种未记录的行为。我觉得新的驱动程序版本抛出异常是正确的。修正代码,继续前进!非常感谢,兰斯。你清楚地表明了我的怀疑。它几乎吞噬了我的大脑,想知道出了什么问题,却没有触及单件代码,它如何抛出异常。但是你帮我把想法弄清楚了。