关于preparedstement中setXX的错误

来源:互联网 发布:电脑软件网站 编辑:程序博客网 时间:2024/06/06 20:46

这个问题困扰了我很久,源码如下

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知识有缺陷,还是得继续加油!

努力看源码,努力再努力!!


0 0
原创粉丝点击