【发布时间】:2014-02-18 11:36:24
【问题描述】:
我有一个存储过程,它创建一个临时表并填充临时表。填充后,它返回表内的行(SELECT)。
当从 MySQL 工作台运行它时,它的效果非常好,但在带有 JDBC 的 JAVA 中,ResultSet 是空的。我看过一些帖子说我们不应该使用PreparedStatment,但即使Statement也不起作用。
为了测试,我将工作划分为存储过程。现在我打电话:
CallableStatement ps = connection.prepareCall("{CALL myProcedure(?)}");
ps.setString(1, "value");
ps.execute();
创建临时表并填充它。此后,我尝试使用相同的连接
Statement st = connection.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM tmp_table");
结果集仍然是空的。我能做些什么?任何帮助表示赞赏。
【问题讨论】:
-
您的连接设置是什么?可能他们没有承诺?
-
我的猜测,因为它在工作台上工作将与事务有关,请尝试将事务添加到您的 java 代码中。一旦事务结束并且您的代码在调用存储过程时不使用事务,可能会丢弃临时表。
-
它是tomcat资源中的一个连接池,auto-commit=true;我在 MySQL 过程中尝试了事务和提交。但我也可以在 java 中尝试。
-
一旦从java执行过程,检查你的临时表创建的数据库,如果它创建了那么它的问题与你的选择语句
标签: java mysql sql sql-server jdbc