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

PreparedStatement为何抛出索引越界错误?PostgreSQL登录验证问题

解决PreparedStatement索引越界错误及登录验证问题

问题根源

index out of range error的核心原因是混淆了两个完全不同的索引逻辑:

  • PreparedStatement的setString方法里的索引,是SQL语句中?的顺序号(从1开始),和数据库表的列序号没有任何关系。
  • 你的SQL语句里只有2个?,所以只能用1和2作为索引,调用setString(4, pass)必然触发索引越界。

修正代码

假设你的表第1列是uname(用户名)、第4列是upass(密码),修正后的代码如下:

PreparedStatement ps = con.prepareStatement("SELECT uname, upass FROM shams WHERE uname=? AND upass=?");
ps.setString(1, name); // 对应第一个?,匹配表的第1列uname
ps.setString(2, pass); // 对应第二个?,匹配表的第4列upass

关键提醒

  • 如果表的第4列字段名不是upass,请把SQL里的upass替换为实际字段名(比如user_password)。
  • 后续使用PreparedStatement时,务必以SQL语句中?的出现顺序来设置索引,不要再和表的列位置绑定。

内容的提问来源于stack exchange,提问作者M Shams

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:42:41