簡體   English   中英

使用Java程序從SQLServer過程中獲取值

[英]Fetching value from a SQLServer procedure using java program

我有一個程序

USE [ER]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[PKG_ER_SEL$sp_ERGetOrgDetails]  
   @v_OrgId int = NULL,
   @v_Email varchar(max) = NULL,


   @cv_1 varchar(8000)  OUTPUT
AS 
     BEGIN
      BEGIN TRY
         SET @cv_1 = NULL
         SELECT 
            o.ORGID, 
            o.NAME, 
            o.PHONE, 
            o.URL, 
            o.CURRENCY, 
            o.MEASUREMENT, 
            o.ISACTIVE, 
            u.FIRSTNAME, 
            u.LEVELID, 
            u.APPROVALLIMIT, 
            u.USERID, 
            u.MANAGERID
         FROM 
            dbo.ER_ORGANIZATIONS  AS o 
               JOIN dbo.ER_USERS  AS u 
               ON o.ORGID = u.ORGID
         WHERE 
            o.ORGID = @v_OrgId AND 
            u.EMAIL = @v_Email AND 
            u.ISACTIVE = 1
         ORDER BY u.LEVELID

      END TRY

      BEGIN CATCH
         BEGIN
            PRINT 'System Error: Unhandled error occured during execution of sp_ERGetOrgDetails procedure, Please contact your administrator'
         END
      END CATCH
   END

================================================== ==================

我正在嘗試從此過程中獲取值,該過程返回4條記錄。

我的Java編是-

public static void getOrgDetails1(int orgId, String email){
            Connection con =null;

            try{
                CallableStatement cs=null;
                con = SqlConnectionManager.getConnection();
                cs = con.prepareCall("{call PKG_ER_SEL$sp_ERGetOrgDetails(?,?,?)}");
                cs.setInt(1,orgId);
                cs.setString(2, email);
                cs.registerOutParameter(3, java.sql.Types.VARCHAR); //cv_1
                cs.execute();
                String resultSet=cs.getString(3);
                System.out.println(resultSet);


            }catch(Exception e){
                e.printStackTrace();
            }finally{
                SqlConnectionManager.releaseConnection(con);
            }

}  

當我運行此Java編時,我得到的輸出為null,因為我期望有4條記錄,因此字符串中有一些值。

誰能幫忙我如何從SQL Server過程中獲取價值。

嘗試更改String resultSet=cs.getString(3); ResultSet resultSet = cs.getResultSet();

然后,您將不得不遍歷結果集以獲取四行中的每一行。

如果期望輸出4個值,那么您的過程不正確,您的Java代碼也不正確。 如果期望ResultSet /或多個值作為輸出,請從SQL過程返回游標或增加no。 out參數為4。作為過程的一部分,您將必須設置輸出變量的值。 您編寫Java類的方式,只能獲得1個值,即在過程中已聲明為OUT參數的varchar(8000)參數。 您甚至沒有為變量@ cv_1分配任何值,因此在Java端您將得到null。 從過程中返回一個游標,並使用registerOutParameter(3,OracleTypes.CURSOR)代替registerOutParameter(3,Types.String)和(ResultSet)getObject(3)代替getString(3)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM