我有一个存储过程,它创建临时表并填充临时表。填充后,它使用 (SELECT
) 返回表内的行。
当从 MySQL 工作台运行它时,效果非常好,但在带有 JDBC 的 JAVA 中,结果集是空的。我浏览过一些帖子,其中说我们不应该使用 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");
结果集仍然是空的。我能做些什么?如有任何帮助,我们将不胜感激。
最佳答案
谢谢各位的帮助! 我发现了错误。错误出现在代码中。
我在调用过程时发送一个参数。出于测试目的,我这样做了
SET @param = "value";
后来,我删除了它,但在将数据插入使用该 @param
的临时表时忘记删除它。 MySQL 不知何故可以看到 @param
和 IN param
由于名称而相同,但 JDBC 无法看到这一点,因此,它没有返回任何数据。
关于java - 带有 JDBC 临时表的存储过程没有结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21384113/