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

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

控制台输出信息
...全文
631 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
scott_129 2014-09-29
  • 打赏
  • 举报
回复
你已经把结果集的指向位置指向了最后一行,rs.last(); 。当你再去next的时候肯定就是false,就不进入你的if块了啊。 rs.last(); // 将光标移动到最后一行 int rowCount = rs.getRow(); // 得到当前行号,即结果集记录数 这两个没有必要,建议删除应该就可以了。
姜小白- 2014-09-29
  • 打赏
  • 举报
回复
不好意思,楼主被我误导了 上次给楼主 rs.last(); // 将光标移动到最后一行 int rowCount = rs.getRow(); // 得到当前行号,即结果集记录数 是帮忙查看记录数的,如果记录数非0,再要用结果集时 可以使用 rs.beforeFirst(); 把指针再移到初始化的位置 楼主的代码中,记录数还是0,还是没有查询到数据 楼主把 传递的username写死,查询一次,看能否查询出结果
求知若渴CC 2014-09-29
  • 打赏
  • 举报
回复
引用 4 楼 zhangjihao 的回复:
我想一个可能的原因是username值里有空格,?username = ${username}& 这句=号后台的空格可能会和${username}值一起传递到后台,按如下修改试试:

if(username != null){
    username = username.trim();
}
谢谢了!这个问题我发了两个帖子都解决不了,原来是小小的空格出了问题!!自己还是不够细心,不过问题解决了好高兴啊!
求知若渴CC 2014-09-29
  • 打赏
  • 举报
回复
引用 1 楼 haoyyy 的回复:
rs.last();
的问题吧.rs.last();已经把结果集放到最后一行了.当然没有next. 把这两句话注释掉就OK了:
            rs.last();                  // 将光标移动到最后一行     
            int rowCount = rs.getRow(); // 得到当前行号,即结果集记录数
这两条是我做测试用的,把那两条去掉还是进不到if里面,因为结果集里面没东西
howsun_zh 2014-09-29
  • 打赏
  • 举报
回复
我想一个可能的原因是username值里有空格,?username = ${username}& 这句=号后台的空格可能会和${username}值一起传递到后台,按如下修改试试:

if(username != null){
    username = username.trim();
}
tuzuxiao 2014-09-29
  • 打赏
  • 举报
回复
楼上两位都是正解
haoyyy 2014-09-28
  • 打赏
  • 举报
回复
rs.last();
的问题吧.rs.last();已经把结果集放到最后一行了.当然没有next. 把这两句话注释掉就OK了:
            rs.last();                  // 将光标移动到最后一行     
            int rowCount = rs.getRow(); // 得到当前行号,即结果集记录数

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧