[英]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.