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
相关产品推荐
相关产品推荐

