You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

登录验证失败:控制台报Parameter number 1 is not an OUT parameter错误

问题原因分析

控制台抛出的Parameter number 1 is not an OUT parameter错误是核心诱因,直接导致Hibernate无法正确执行用户查询逻辑,返回空结果后触发页面的“不存在该账户”提示。这个错误的本质是:调用SQL存储过程或使用CallableStatement时,代码错误地将输入(IN)参数声明为输出(OUT)参数,JDBC驱动无法识别参数类型,最终导致查询执行失败。

排查与解决步骤

1. 检查LoginDao中的数据库操作代码

重点核查用户查询相关的方法,尤其是涉及存储过程或CallableStatement的逻辑:

  • 若使用Hibernate的@NamedStoredProcedureQuery注解,确认参数的mode属性:用户名、密码这类输入参数的mode必须设为ParameterMode.IN,而非OUT或INOUT。
    错误示例:
    @StoredProcedureParameter(mode = ParameterMode.OUT, name = "username", type = String.class)
    
    正确示例:
    @StoredProcedureParameter(mode = ParameterMode.IN, name = "username", type = String.class)
    
  • 若使用原生JDBC的CallableStatement,检查参数注册逻辑:不要对输入参数调用registerOutParameter(),直接用setString()/setObject()设置参数值即可。
    错误示例:
    callableStatement.registerOutParameter(1, Types.VARCHAR); // 错误将username注册为OUT参数
    
    正确示例:
    callableStatement.setString(1, username); // 直接设置输入参数值
    

2. 验证查询逻辑的正确性

修复参数类型问题后,确认查询条件匹配业务规则:

  • 由于表中id与username值相同,检查查询时是否错误用id作为匹配字段(比如传入用户名却用id字段查询),确保使用username字段进行条件匹配。
  • 确认密码比对逻辑:数据库中密码为加密存储,需保证代码对用户输入的密码执行相同加密算法后,再与数据库值比对,避免因加密不一致导致查询无结果。

3. 检查SpringMVC-servlet.xml中的Hibernate配置

确认Hibernate会话工厂配置正确,尤其是存储过程相关配置(若使用):比如是否正确指定存储过程名称和参数映射,避免因配置错误引发参数解析异常。

4. 测试修复后的代码

修复完成后重新运行项目:

  • 查看控制台是否仍存在Parameter number 1 is not an OUT parameter错误。
  • 输入正确凭证,验证是否能正常登录,页面是否还会弹出错误提示。

内容的提问来源于stack exchange,提问作者Turaga Harini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 21:42:39