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

标签 java mysql stored-procedures slave

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

相关文章:

MySQL按总重量排序结果

MySQL Server 5.0 命令行客户端无法打开文件 .sql

sql-server-2008 - 通过 VBA 从传递查询返回值

mysql如果没有select

java - WCF 互操作性测试

java - 获取以下代码片段的 java NPE。不确定出了什么问题

java - Android - 从 UI 线程切换回来?

JAVA - 使用自定义套接字协议(protocol)

Mysql 组内随机项和组内计数项

php - 在 iPhone 上获取数据