Code Bye

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

小弟遇到的这个问题也挺郁闷的,因为各个环节都没发现错误
问题描述:
用户点击超链接将用户名(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是存在的

控制台输出信息


10分
rs.last();

的问题吧.rs.last();已经把结果集放到最后一行了.当然没有next.
把这两句话注释掉就OK了:

            rs.last();                  // 将光标移动到最后一行     
            int rowCount = rs.getRow(); // 得到当前行号,即结果集记录数

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

这两个没有必要,建议删除应该就可以了。

10分
楼上两位都是正解

30分
我想一个可能的原因是username值里有空格,?username = ${username}& 这句=号后台的空格可能会和${username}值一起传递到后台,按如下修改试试:
if(username != null){
    username = username.trim();
}
引用 1 楼 haoyyy 的回复:
rs.last();

的问题吧.rs.last();已经把结果集放到最后一行了.当然没有next.
把这两句话注释掉就OK了:

            rs.last();                  // 将光标移动到最后一行     
            int rowCount = rs.getRow(); // 得到当前行号,即结果集记录数

这两条是我做测试用的,把那两条去掉还是进不到if里面,因为结果集里面没东西

引用 4 楼 zhangjihao 的回复:

我想一个可能的原因是username值里有空格,?username = ${username}& 这句=号后台的空格可能会和${username}值一起传递到后台,按如下修改试试:

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

谢谢了!这个问题我发了两个帖子都解决不了,原来是小小的空格出了问题!!自己还是不够细心,不过问题解决了好高兴啊!

不好意思,楼主被我误导了
上次给楼主
rs.last(); // 将光标移动到最后一行     
int rowCount = rs.getRow(); // 得到当前行号,即结果集记录数  
是帮忙查看记录数的,如果记录数非0,再要用结果集时
可以使用 rs.beforeFirst();  把指针再移到初始化的位置 

楼主的代码中,记录数还是0,还是没有查询到数据
楼主把 传递的username写死,查询一次,看能否查询出结果


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明查询语句正确,传值正确,但数据库里仍然查不出东西