日期:2014-05-19  浏览次数:20758 次

Servlet登录验证出问题了!求解!
一下是我写的代码,都是用servlet做的。在loginservlet界面登录,由loginclservlet来处理数据库(access)中是否有用户输入的用户名和密码。结果当用户id不正确或者是空,但密码正确的时候,页面不能成功跳转。。我很纠结啊!不知道啥原因,希望能有高人解决一下。感激不尽!!
  //接受用户提交的数据
String id=request.getParameter("id");
String password=request.getParameter("password");
//到数据库中取验证
//因为servlet本身就是一个java类,因此我们
//Servlet操作数据库和普通java类是一样的。
Connection con=null;
ResultSet rs=null;
PreparedStatement ps=null;
try {
//1.加载驱动
String jdriver="sun.jdbc.odbc.JdbcOdbcDriver";
String connectDB="jdbc:odbc:AccessDatabase";
Class.forName(jdriver);
//2.得到连接
con=DriverManager.getConnection(connectDB);
//3.创建preparedsatement
String query="SELECT * FROM users WHERE id=? AND passwd=?";
ps=con.prepareStatement(query);
//4.给?赋值
ps.setObject(1, id);
ps.setObject(2, password);
//5.执行操作
rs=ps.executeQuery();
//6.根据结果做处理
if(rs.next())
{
//说明该用户合法
request.getRequestDispatcher("/MainFrame").forward(request, response);
}
else
{
//能使用请求转发,就别用重定向
//request.getRequestDispatcher("/LoginServlet").forward(request, response);
response.sendRedirect("/UserManager2/LoginServlet");
}
} catch (Exception e) {
e.printStackTrace();
}

------解决方案--------------------
应该是数据类型不匹配 建议将密码设置为必须输入项
楼主密码不输就导致查询错误 那就是密码为null建议在查询之前判断密码是否为空若为空则pw="";
------解决方案--------------------
41行指的是:ps.setObject(2, password);
我只是输入了一个数据库中没有的密码,结果就出错了。。。 

这个怎么不指定类型呢?数据库字段是什么类型就直接set什么类型就行了