这个问题困扰了我很久,源码如下
private Connect c = new Connect();
@Override
public String userLogin(String username) {
String pass_db="";
try {
Connection conn = c.getConnection();
String sql = "select password from user where username=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(2, username);
ResultSet rs = ps.executeQuery();
while(rs.next()){
pass_db = rs.getString(3);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
·我的User如下
private int id;
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
结果报错Parameter index out of range (2 > number of parameters, which is 1).
如果将ps.setString(2, username);改为ps.setString(1, username);
就会报错:java.sql.SQLException: Column Index out of range, 3 > 1.
将pass_db = rs.getString(3);改为pass_db = rs.getString(1);就完美结局了
综上,所得的原因我认为是sql语句的问题,我的sql语句写的是select password from user where username=?查询的一个内容password,因此没有必要讲user中的所有属性或者是其中第几个的属性的问题,查询有几个属性就应该在setString()中写几.
终于解决了困扰我许久的问题。查了很多原因没有解决,归根结底是sql语句问题和preparedstatement知识有缺陷,还是得继续加油!
努力看源码,努力再努力!!