当前位置: 首页 > 知识库问答 >
问题:

MySQL连接器问题

狄冥夜
2023-03-14

我面临一个问题,如果更改MySQL连接器Jar版本,我会遇到某些错误。我的代码在JBoss4.0.4.ga版上运行良好。然后我用连接器jar版本mysql-connector-java-5.1.36-bin将JBoss升级到Wildfly,并且没有对运行良好的代码做任何更改。现在,每当我添加一些新行,我就会得到一个错误,说生成的密钥没有被请求。

您需要将statement.return_generated_keys指定为statement.executeupdate()或connection.preparestatement()。

之前我认为这可能是因为服务器(JBoss)升级的问题。并且我开始在每个代码中将statement.return_generated_keys添加到connection.PrepareStatement()中。但是在阅读了这篇文章之后,我意识到,线程迁移到Mysql Connector JAR5.1.27并不是JBoss升级问题,而是Mysql Connector版本导致了这个错误。任何一个可以指出我应该使用哪个版本的mysql连接器来阻止这些错误。因为很难在文件数量中添加statement.return_generated_keys

谢谢

共有1个答案

汪驰
2023-03-14

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

  1. Connection.PrepareStatement(字符串sql,int autoGeneratedKeys)
  2. Connection.PrepareStatement(字符串sql,int[]ColumnIndexs)
  3. Connection.PrepareStatement(String sql,String[]columnNames)
  4. 语句.ExecuteUpdate(字符串sql,int autoGeneratedKeys)
  5. 语句.ExecuteUpdate(字符串sql,int[]columnIndexes)
  6. 语句.ExecuteUpdate(String sql,String[]columnNames)

从javadoc中获取connection.PrepareStatement(String sql,int autoGeneratedKeys)

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

不幸的是,javadoc不清楚当您调用connection.preparestatement(StringSQL)时会发生什么。

据我所知,传递statement.return_generated_keys(或列名/索引)可以保证statement.getgeneratedkeys()将返回一个值。如果您不显式请求它,就不能保证getGeneratedKeys()会返回这些值。

简而言之,为了符合JDBC规范,如果您打算调用statement.getGeneratedKeys(),您应该始终使用上面的方法之一

 类似资料:
  • 我在尝试连接到数据库时遇到以下错误: java.sql.没有找到适合jdbc:mysql://localhost:3306/等的驱动程序。 MySQL连接器。jar位于WEB-INF/lib文件夹中 以下内容已添加到pom中。xml文件: 如有任何帮助/指导,将不胜感激。

  • 我正在使用部署在Kafka Connect中的Debezium MySQL连接器,将MySQL更改流式传输到Kafka主题,并从中获取这些消息,从而丰富数据并将数据推送到另一个MySQL。 源和接收器都是MySQL。 我的源表中有几个列,列数据类型为TIMESTAMP。 创建时间:2021-10-06 09:32:46 我可以在Kafka的信息中看到上述数据,如下所示 “创建时间”:“2021-1

  • 我有一个带有持久卷的WordPress和MySQL容器。我一直在努力学习docker,并在学习过程中错误地删除了老docker撰写。yml和mysql卷之外的所有卷。我现在已经尽我所能将其重新创建到compose文件中,但每当我启动机器时,它都无法连接到MySQL服务器。有谁能指出我哪里做错了。 我怀疑我对两者之间的联系有问题,但我不确定。 docker-compose.yml: 日志:

  • 现在我已经在本地安装了cassndra,并从https://spark-packages.org/package/datastax/spark-cassandra-connector下载了spark-cassandra-connector2.10-1.6.2.jar 如果我下载了错误版本的连接器或有其他问题,有人可以帮助我吗?

  • 根据文档,ConnectorJ应根据character_set_server变量自动检测字符编码... 然而,据我所知,它总是默认 设置名称latin1而不是设置名称utf8mb4 更新:当我更改my.cnf中的character_set_server值并重新启动我的服务器时,ConnectorJ检测到utf8mb4与预期的完全一样。 当我使用set GLOBAL手动设置值时,ConnectorJ

  • 我在Ubuntu 14.04中使用XAMPP for linux。在终端上启动服务时,打印下一个日志: sudo /opt/lampp/lampp启动 "开始XAMPPLinux5.5.30-0... XAMPP:正在启动Apache。。。好啊 XAMPP:正在启动MySQL。。。已经在运行了。 XAMPP:开始ProFTPD...好的。" 我不知道为什么当我第一次启动XAMPPm时,MySQL服