当前位置: 代码迷 >> J2EE >> 查询语句准确,传值正确,但数据库里仍然查不出东西
  详细解决方案

查询语句准确,传值正确,但数据库里仍然查不出东西

热度:15   发布时间:2016-04-17 23:42:20.0
查询语句正确,传值正确,但数据库里仍然查不出东西
小弟遇到的这个问题也挺郁闷的,因为各个环节都没发现错误
问题描述:
用户点击超链接将用户名(username)传至Action,Action再将username传至Dao执行查询语句,前两步都没有问题,username的值也传进了Dao里,Dao里的查询语句也没有问题,但是到了user对象赋值阶段if(rs.next())语句不运行!注:dao类里有很多查询方法
JSP页面:
<s:a href="selectinfo.action?username = ${username}&type=users"><s:text name="查看详情"/></s:a>

Action页面:
public class SelectInfoAction extends ActionSupport {
private String username;
private String type;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String selectInfo() throws Exception{
System.out.println("Action运行=======");
UsersDAO dao = new UsersDAO();
Users user = dao.selectInfo(username);
ActionContext.getContext().getSession().put("usre", user);
if("allusers".equals(type)){  //用户查看某个用户信息
return INPUT;
}else if("users".equals(type)){  //用户查看自己信息
return SUCCESS;
}else{     // 管理员查看用户信息
return "find";
}
}
}

Dao页面:
public Users selectInfo(String username){
Users user = new Users();
System.out.println("username的值为:"+username);
con = DatabaseDAO.getConnection();
try{
pt = con.prepareStatement("SELECT * FROM users where username = ?");
pt.setString(1, username); 
rs = pt.executeQuery();
rs.last();                  // 将光标移动到最后一行     
int rowCount = rs.getRow(); // 得到当前行号,即结果集记录数
System.out.println("当前行号为:"+rowCount);
if(rs.next()){
System.out.println("........if语句不运行!.......");
user.setId(rs.getInt(1));  
user.setUsername(rs.getString(2));
user.setPassword(rs.getString(3));
user.setName(rs.getString(4));
user.setNic(rs.getString(5));
user.setEmail(rs.getString(6));
user.setPhone(rs.getString(7));
user.setSelfshow(rs.getString(8));
}
}catch (Exception e) {
// TODO: handle exception
}finally{
DatabaseDAO.closeRs(rs);
DatabaseDAO.closePt(pt);
DatabaseDAO.clodeCon(con);
}
return user;
}

数据库里内容username是存在的

控制台输出信息

------解决思路----------------------
rs.last();
的问题吧.rs.last();已经把结果集放到最后一行了.当然没有next.
把这两句话注释掉就OK了:
            rs.last();                  // 将光标移动到最后一行     
            int rowCount = rs.getRow(); // 得到当前行号,即结果集记录数

------解决思路----------------------
你已经把结果集的指向位置指向了最后一行,rs.last(); 。当你再去next的时候肯定就是false,就不进入你的if块了啊。
 rs.last();                  // 将光标移动到最后一行     
            int rowCount = rs.getRow(); // 得到当前行号,即结果集记录数

这两个没有必要,建议删除应该就可以了。
------解决思路----------------------
楼上两位都是正解
------解决思路----------------------
我想一个可能的原因是username值里有空格,?username = ${username}& 这句=号后台的空格可能会和${username}值一起传递到后台,按如下修改试试:

if(username != null){
    username = username.trim();
}

  相关解决方案