为什么PreparedStatement给出索引超出范围的错误? [已关闭]

问题描述 投票:0回答:1

我在 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);

This login not authenticated through database

postgresql jsp jdbc prepared-statement
1个回答
1
投票

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查询设置参数的方法。

© www.soinside.com 2019 - 2024. All rights reserved.