关于preparedstement中setXX的错误

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

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值