if(rs.next())
protected String doInBackground(String...params) {
if (userid.trim().equals("") || password.trim().equals("")) z = getString(R.string.wrong_user);
else {
try {
Connection con = connectionClass.CONN();
if (con == null) {
z = getString(R.string.connection_error);
} else {
String query = "{?=call [system].[usp_validateUserLogin](?,?,?,?,?)}";
CallableStatement cs = con.prepareCall(query);
cs.registerOutParameter(1,Types.INTEGER);
cs.setString(2, userid);
cs.setString(3, password);
cs.setInt(4, 72);
cs.setNull(5, Types.BIT);
cs.registerOutParameter(6, Types.VARCHAR);
cs.execute();
boolean firstResultIsResultSet = cs.execute();
if (firstResultIsResultSet) {
ResultSet rs = cs.getResultSet();
// process result set
}
}
}
if (rs.next()) {
z = getString(R.string.login_succes);
isSuccess = true;
} else {
z = getString(R.string.Invalid_Credentials);
isSuccess = false;
}
}
} catch (Exception ex) {
isSuccess = false;
z = getString(R.string.Exceptions);
}
}
return z;
}
SPにnullポインタを取得する代わりに、ResultSet rs = cs.getResultSet();
とcs.execute();
を使用
ALTER PROCEDURE [system].[usp_validateUserLogin]
@p_Login NVARCHAR (50),
@p_Password NVARCHAR (32),
@p_CompanyID INT,
@p_OutDetails BIT = 1,
@p_AuthenticationTicket VARCHAR(200) OUTPUT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @errNo INT,
@recCount INT,
@res INT
SELECT u.*
INTO #TMPLOGIN
FROM SYSTEM.[user] AS u WITH (NOLOCK)
WHERE (u.login = @p_Login)
AND (u.company_id = @p_CompanyID)
AND (PWDCOMPARE (@p_Password, u.passwd) = 1)
AND (u.status = 0) --Active
SELECT @errNo = @@ERROR,
@recCount = @@ROWCOUNT
IF (@errNo <> 0)
BEGIN
RETURN 1010
END
IF (@recCount = 1)
BEGIN
DECLARE @userID INT
SELECT @userID = id
FROM #TMPLOGIN
EXEC @res = SYSTEM.USP_RENEWAUTHENTICATIONTICKET
@p_DoerTicket = '',
@p_AuthenticationTicket = @p_AuthenticationTicket OUTPUT,
@p_UserID = @userID,
@p_CompanyID = @p_CompanyID
IF (@res <> 0)
RETURN @res
END
--SET @p_AuthenticationTicket = 'TESTAUTHENTICATIONTICKET'
IF (@p_OutDetails = 1)
BEGIN
SELECT *
FROM #TMPLOGIN
END
RETURN 0
END
このストアドプロシージャは結果セットを返しますか、または「OUT」パラメータを持っていますか?ストアドプロシージャで 'set nocount on'を試してみることもできます(最初に更新カウントを返すかもしれません)。また、そのストアドプロシージャのコードをあなたの質問に追加してください。例えば、http://stackoverflow.com/questions/24428928/jdbc-sql-error-statement-did-not-return-a-result-set –
これはoutパラメータを持っていますnocountがオンになっています –
問題は、このストアドプロシージャに、情報を通信するための3つの異なる方法があります:outパラメータ、戻り値**、および**結果セットです。これらの結果の順序は、ストアドプロシージャのロジックによって異なります。 –