代码之家  ›  专栏  ›  技术社区  ›  Ryan Elkins

从JDBC MSSQL获取返回值

  •  12
  • Ryan Elkins  · 技术社区  · 15 年前

    我使用Java SQL Server JDBC驱动程序2通过Java连接到SQL Server(2005)。

    如何从存储过程中获取返回值?我在做如下的事情:

    Connection connection = dataSource.getConnection()
    CallableStatement proc = connection.prepareCall("{ call dbo.mySproc() }");
    proc.execute();
    

    我应该使用execute()吗?executeQuery()?executeUpdate()?默认情况下,这些都不会返回返回值,但我真的不确定如何到达它。

    编辑1:为了清楚起见,我知道如何调用存储过程。这个问题特别是关于如何获得返回值(而不是结果集)。返回值是一个整数,通常是在执行没有结果集的查询时生成的,或者如果您特别声明 RETURN 0 在你的SQL中。

    edit 2:executeUpdate()返回一个int,但该int与返回值不同。此外,out参数与返回值不同。

    2 回复  |  直到 10 年前
        1
  •  35
  •   Ryan Elkins    15 年前

    博佐第二次修订的答案很接近,但并不完全符合。但这确实让我找到了答案。

    以我开始的代码为例,我们最终得到:

    CallableStatement proc = connection.prepareCall("{ ? = call dbo.mySproc() }");
    proc.registerOutParameter(1, Types.INTEGER);
    proc.execute();
    int returnValue = proc.getInt(1);
    

    这里的关键部分是“?在“呼叫”前 prepareCall 为返回值和 registerOutputParameter . 它必须注册为一个整数,因为返回值总是一个int(至少在SQL Server中,在其他DBS中可能不同)。因此你必须用 getInt . 我测试了这个方法,它确实有效。

        2
  •  2
  •   Bozho    15 年前
    c.prepareCall("? = ..");
    cs.execute();
    String returnedValue = cs.getString(1);
    

    (或适当类型的方法。你可以使用 getObject 可替代地)

    an old getting started tutorial

    callableStatement中的getxxx方法从存储过程的out参数和/或返回值中检索值。

    (顺便说一句,Umesh提供的链接包含了这类信息。)