【问题标题】:How to call SQL Server stored procedure in java with result set, and input, output parameters?java - 如何使用结果集和输入、输出参数在java中调用SQL Server存储过程?
【发布时间】:2012-02-18 03:46:11
【问题描述】:

在 Oracle 中,我可以使用以下内容:

    String query = "{ ? = call get_config_func( ?, ? ) }";
    try
    {
        CallableStatement cs = con.prepareCall( query );
        cs.registerOutParameter(1, OracleTypes.CURSOR);
        cs.setInt( 2, i );
        cs.registerOutParameter(3, java.sql.types.INTEGER);
        cs.execute();
        ResultSet results = ((OracleCallableStatement)cs).getCursor (1);
        String val = cs.getString(3);

        if( results != null)
        {
            while( results.next() )
            {
             .....

但是,我对不能与 SQL Server 一起使用的 Oracle 的引用感到困惑。

我尝试了以下方法:

    String query = "{ call uspGetLastLocation( ?, ? }";
    try
    {
        cs = con.prepareCall( query );
        cs.setLong(1, id );
        cs.registerOutParameter(2, java.sql.Types.VARCHAR );
        rs = cs.executeQuery();

        while(rs.next())
        {
            .....

但我收到以下错误

“{”附近的语法不正确。

我见过使用PreparedStatement 而不是CallableStatement 的示例,并将查询更改为

    String query = "EXEC uspGetLastLocation  ?, ?";

但我不知道如何处理输出参数。

有任何建议或指向参考的指针吗?

谢谢。

【问题讨论】:

    标签: java sql-server-2008 stored-procedures jdbc


    【解决方案1】:

    看起来你错过了代码中的一个括号。 试试这个

    String query = "{ call uspGetLastLocation( ?, ? )}";
    

    【讨论】:

    • 我注意到了这一点,但现在我收到错误“语句没有返回结果集。”
    • 是关于定义输出参数以及我如何尝试获取结果集的其余语法吗?
    • Oracle 和 SQL Server 的 JDBC API 保持不变。所以首先测试您的过程并检查它是否返回任何结果。我相信您的代码执行得很好,并且没有为您传递的参数返回任何结果。
    • 谢谢,我终于让它工作了。存储过程期望使用 null 而不是 0 来使用默认值。
    猜你喜欢
    • 1970-01-01
    • 2019-10-08
    • 2023-03-12
    • 2012-11-24
    • 1970-01-01
    • 2015-11-03
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多