gpt4 book ai didi

java - 在只读服务器上使用java在Mysql中创建临时表导致错误

转载 作者:行者123 更新时间:2023-11-29 23:20:59 27 4
gpt4 key购买 nike

我的生产数据库有一个只读从属数据库,我正在尝试运行一个生成报告的过程。该过程创建一个临时表,插入一些记录,并从表中选择结果。当我通过命令行界面或 db UI 工具 (Navicat) 运行该过程时,效果很好,创建的表没有任何问题,我可以插入并接收正确的报告。

当我尝试使用 Java 中的 jdbc 调用相同的过程时,问题就出现了。当我运行该过程时,出现异常:

Exception in thread "main" java.sql.SQLException: The MySQL server is running with the --read-only option so it cannot execute this statement
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1094)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4226)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4158)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2615)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2776)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2840)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2082)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2212)
at com.mysql.jdbc.CallableStatement.executeQuery(CallableStatement.java:956)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)

我在 java 应用程序和 Navicat 中使用相同的用户,并且我需要使用临时表,因为此报告的结果也在其他报告中使用。我在网上查了一下,但似乎找不到任何原因为什么它可以正常工作,但在通过 java 运行时却不能。

最佳答案

我解决了这个问题。我正在使用事务,当我从 Java 调用该过程时,START TRANSACTION 调用导致 MySQL 错误。在开始事务之前添加对 @@read_only 的检查解决了该问题。 (仍然不知道为什么它在 Navicat 中工作而不是在 Java 中工作)

关于java - 在只读服务器上使用java在Mysql中创建临时表导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27300380/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com