所以我试图使用我们的登录程序问题是它有三种不同的方式来回传信息:输出参数,返回值和结果,我不知道如何使用它作为我得到了java.sql.SQLException: Parameter #7 has not been set什么是我的第7个参数,我应该如何去...
所以我试图使用我们的登录程序问题是它有三种不同的方式来回传信息:输出参数,返回值和结果,我不知道如何使用它作为
我得到了
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
到目前为止我一直在努力
> String query =“{call [system].[usp_validateUserLogin](?,?,?,?,?)}”;
给了我
The executeQuery method must return a result
> cs.setNull(7,Types.NULL);
然后我得到了
java.sql.SQLException: Procedure or function usp_validateUserLogin has too many arguments specified.
> cs.setInt(5,1);
还是一样
> ResultSet 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
- Java简明解读代码块的应用 2023-03-06
- MyBatis配置的应用与对比jdbc的优势 2023-03-22
- Javaweb会话跟踪技术Cookie和Session的具体使用 2023-03-07
- 浅析Java单例设计模式(自写demo) 2023-08-11
- Java聊天室之实现使用Socket传递音频 2023-06-23
- Spring自定义注解配置简单日志示例 2023-07-15
- SpringBoot 项目使用hutool 工具进行 http 接口调用的处理方法 2022-11-29
- jsp实现ie中的后退方法 2023-08-02
- Spring的@Value如何从Nacos配置中心获取值并自动刷新 2023-02-27
- Java操作MinIO存储服务的API示例 2023-10-08