我的生产数据库有一个只读从属数据库,我正在尝试运行一个生成报告的过程。该过程创建一个临时表,插入一些记录,并从表中选择结果。当我通过命令行界面或 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/