小弟刚刚加入学习java,参考教程编写了一个登陆模块的代码,具体实现是表单提交——servlet接收——调用以下DBConnectionDAO处理,其中的StudentDAO是一个实例类,工程运行正常,但是最后的结果本来我是要显示登陆的帐号密码的,却是不能显示,返回的是false(请看下下边的servlet代码),仔细看了几遍代码,没有发现那里有错,所以只好来请教各位前辈,我的代码到底是哪儿错了,对了,数据插入是正常的....但是读数据却不知道错在哪儿!
数据处理代码:
package dao;
import java.sql.*;
import dao.StudentDAO;public class DBConnectionDAO { /**
 * @param args
 */
public StudentDAO FindStudent(String name,String password) {
try{
Class.forName("org.apache.derby.jdbc.ClientDriver");
}catch(ClassNotFoundException e){

}

Connection coon=null;
// Statement stmt=null;
ResultSet rs=null;
PreparedStatement pstmt=null;


try{
String url="jdbc:derby://localhost:1527/myeclipse";
String user="classiccars";
String psw="classiccars";
String sql="select * from Student2 where name=? and password=?";

coon=java.sql.DriverManager.getConnection(url, user, psw);
// stmt=coon.createStatement();
// stmt.executeUpdate("insert into student2(name,password,age)values('张淋','19861108',23)");
pstmt=coon.prepareStatement(sql);
pstmt.setString(1, name);
pstmt.setString(2, password);


rs=pstmt.executeQuery();

if(rs!=null&&rs.next()){

StudentDAO stu=new StudentDAO();
stu.setname(rs.getString("name"));
stu.setPassword(rs.getString("password"));
stu.setAge(rs.getInt(3));

return stu;
}



}catch(Exception e){

}
finally{
try{
rs.close();
pstmt.close();
// stmt.close();
coon.close();
}catch(Exception e){

}
}
return null; }}
以下为servlet代码:package servlet;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import dao.*;public class LoginServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse 
response) 
    throws ServletException, IOException { 
  StudentDAO stu = new DBConnectionDAO().FindStudent( 
   
 request.getParameter("name"),request.getParameter("password")
); 
   if(stu!= null&&
stu.getname().equals(request.getParameter("name"))&&stu.getPassword().equals(request.getParameter("password"))) { 
   request.setAttribute("message", "Successful"); request.getSession().setAttribute("stu", stu);
    
  } else { 
   request.setAttribute("message", "False"); 
  } 
  request.getRequestDispatcher("/result.jsp").forward(request,response); 
 } 
 
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【tiger435】截止到2008-07-14 14:59:26的历史汇总数据(不包括此帖):
    发帖的总数量:0                        发帖的总分数:0                        每贴平均分数:0                        
    回帖的总数量:0                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:0                        结贴的总分数:0                        
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:---------------------结分的百分比:---------------------
    无满意结贴率:---------------------无满意结分率:---------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    把stu,name,password都打一打出来看看,就能知道哪儿有问题了!!
      

  3.   

    跟谁比较呀!
    if(stu!= null&& 
    stu.getname().equals(request.getParameter("name"))&&stu.getPassword().equals(request.getParameter("password"))) 
    这里看不懂呀
    stu对象不就是你URL传过去的参数嘛 ,为什么自已比自己呢?
    应该把参数传到STU对象中,然后再查询数据库,如果查到就返回TRUE,forward到相应页面,否则返回FLASE,forward到相应页面。
      

  4.   

    if(rs!=null&&rs.next()){
    这个地方你改一下吧
    直接这样就行
    if(rs.next()){
    是不是这里的错我不知道
    但是你那么写是多余的
      

  5.   

    在DBConnectionDAO 中,打印rs;
    看结果是什么?然后在 LoginServlet 中打印Student对象!
      

  6.   

    这样改也是错的,加了个rs!=null是比较规范的写法嘛,按前辈您说的去掉还是一样
      

  7.   

    前辈您好,我的做法是:先从数据库中查询所有数据,然后将其保存到rs中,然后又将值传给stu对象,所以才有后边的那一句比较
      

  8.   

    把stu.name.password打一打出来是什么意思啊,小弟初学不懂,望前辈给个详细点的指导
      

  9.   

    按照代码看:if(stu!= null&& 
    stu.getname().equals(request.getParameter("name"))&&stu.getPassword().equals(request.getParameter("password"))) 中stu!= null后边完全是多余的,没有什么作用
    没有全部的代码所以也看不太明白
    打出来就是在代码中写下
    System.Out.println(name);
    然后在tomcat中看运行提示
      

  10.   


    怎么打印啊,没有main方法我写了System.out.println的语句然后在eclipse中就会运行出错,说是没有main方法
      

  11.   

    }catch(Exception e){ } 
    这里要把错误信息显示出来
    }catch(Exception e){ 
    e.printStackTrace();//把这句加进去,再运行看看吧.估计是有异常了.

      

  12.   

    System.out.println(name);
    不会呀
    加个import java.io.*;看行不行
      

  13.   

    呵呵
    你的判断有意义么??
    你"StudentDAO stu = new DBConnectionDAO().FindStudent( 
      
    request.getParameter("name"),request.getParameter("password") 
    ); "已经把要判断的参数传进去了,还判断它干嘛?
    对了,你在把request.getParameter("name")和request.getParameter("password")
    输出看看有没有得到 
      

  14.   

    我没用过eclipse,我都是编译好后直接在TOMCAT中运行的
    加上import java.io.*,System.Out.println(name); 
    后编译,在TOMCAT提示中看
      

  15.   

    现在都能得到了,但是还是显示“false”
      

  16.   

    在rs=pstmt.executeQuery(); 之后输出一下rs.getString("name")和rs.getString("password") 
      

  17.   


    想到了
    是if(rs!=null&&rs.next())表达式错了
    因为RS不等于空,所有表达式成立,没有执行rs.next();游标没有移动
    你可以把rs!=null去掉而直接用rs.next()
      

  18.   

    问题已经解决了....原因是数据库问题,name和password的类型是char类型,而我设置的长度是20个字符,所以,数据库中插入的数据自动加了一堆空格在后边,我登陆的时候只输了前边几位字母,所以不能正常登陆谢谢各位前辈,你们太厉害了听你们几句指导学到很多东西小弟给你们鞠躬了~~!
      

  19.   


    迷迷糊糊的把&&看成是||了
    呵呵
    不好意思