【问题标题】:No ResultSet from stored procedure with temporary table with JDBC带有 JDBC 的临时表的存储过程没有 ResultSet
【发布时间】: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


【解决方案1】:

谢谢大家的帮助! 我发现了错误。错误在代码中。

我在调用过程时发送了一个参数。出于测试目的,我做了

SET @param = "value";

后来,我删除了它,但是在将数据插入到使用该 @param 的临时表中时忘记删除它。 MySQL 不知何故可以看到 @paramIN param 由于名称相同,但 JDBC 看不到,因此它没有返回任何数据。

【讨论】:

    猜你喜欢
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    相关资源
    最近更新 更多