gpt4 book ai didi

java - SQLException 参数 #7 尚未设置

转载 作者:搜寻专家 更新时间:2023-11-01 03:33:24 25 4
gpt4 key购买 nike

所以我正在尝试使用我们的登录程序,问题是它有三种不同的方式来传达信息:out 参数、返回值result 我不确定如何处理它我得到一个

java.sql.SQLException: Parameter #7 has not been set

我的第 7 个参数是什么,我应该如何对它进行贴标?使这个功能

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);
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

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 = 'TESTAUTHENTICATIONTICKET0123456789'
IF ( @p_OutDetails = 1 )
BEGIN
SELECT *
FROM #TMPLOGIN
END

RETURN 0
END

enter image description here

到目前为止我一直在尝试什么

  1. String query = "{call [system].[usp_validateUserLogin](?,?,?,?,?)}";

给了我

The executeQuery method must return a result

  1. cs.setNull(7, Types.NULL);

然后我得到一个

java.sql.SQLException: Procedure or function usp_validateUserLogin has too many arguments specified.

  1. cs.setInt(5, 1);还是一样

  2. 结果集 rs = cs.executeQuery();

代替

boolean firstResultIsResultSet = cs.execute();

最佳答案

我认为 cs.setNull(5, Types.BIT) 不会像您期望的那样运行(为 @p_OutDetails 设置默认值等于 1)您必须执行 cs.setBoolean(5, true) 或使用命名参数 {? =call [系统].usp_validateUserLogin

除此之外,您的代码没有问题,所以问题一定出在其他地方。你真的连接到你认为的数据库吗?您确定数据库中的过程定义与您发布的相同吗?

关于java - SQLException 参数 #7 尚未设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40634686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com