小弟刚刚加入学习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);
}
}
数据处理代码:
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);
}
}
楼主【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
if(stu!= null&&
stu.getname().equals(request.getParameter("name"))&&stu.getPassword().equals(request.getParameter("password")))
这里看不懂呀
stu对象不就是你URL传过去的参数嘛 ,为什么自已比自己呢?
应该把参数传到STU对象中,然后再查询数据库,如果查到就返回TRUE,forward到相应页面,否则返回FLASE,forward到相应页面。
这个地方你改一下吧
直接这样就行
if(rs.next()){
是不是这里的错我不知道
但是你那么写是多余的
看结果是什么?然后在 LoginServlet 中打印Student对象!
stu.getname().equals(request.getParameter("name"))&&stu.getPassword().equals(request.getParameter("password"))) 中stu!= null后边完全是多余的,没有什么作用
没有全部的代码所以也看不太明白
打出来就是在代码中写下
System.Out.println(name);
然后在tomcat中看运行提示
怎么打印啊,没有main方法我写了System.out.println的语句然后在eclipse中就会运行出错,说是没有main方法
这里要把错误信息显示出来
}catch(Exception e){
e.printStackTrace();//把这句加进去,再运行看看吧.估计是有异常了.
}
不会呀
加个import java.io.*;看行不行
你的判断有意义么??
你"StudentDAO stu = new DBConnectionDAO().FindStudent(
request.getParameter("name"),request.getParameter("password")
); "已经把要判断的参数传进去了,还判断它干嘛?
对了,你在把request.getParameter("name")和request.getParameter("password")
输出看看有没有得到
加上import java.io.*,System.Out.println(name);
后编译,在TOMCAT提示中看
想到了
是if(rs!=null&&rs.next())表达式错了
因为RS不等于空,所有表达式成立,没有执行rs.next();游标没有移动
你可以把rs!=null去掉而直接用rs.next()
迷迷糊糊的把&&看成是||了
呵呵
不好意思