我在 PostgreSQL 中创建了一个有 4 列的表,想要从该表的第 1 列和第 4 列验证我的登录,但它给出了索引超出范围错误。
以下代码在我的 Servlet 中无法正常工作:
PreparedStatement ps=con.prepareStatement("SELECT uname,upass FROM shams WHERE uname=? and upass=? ");
ps.setString(1, name);
ps.setString(4, pass);
在
PreparedStatenent
中,用?
表示的SQL查询参数是从1
开始计数的,索引之间没有间隙。当说参数索引越界时,这意味着您向 setString()
方法提供了错误的参数值。另请注意,参数在 SQL 查询中是从左到右计算的。
你应该改变
PreparedStatement ps=con.prepareStatement("SELECT uname,upass FROM shams WHERE uname=? and upass=? ");
ps.setString(1, name);
ps.setString(2, pass);
然后阅读docs了解为SQL查询设置参数的方法。