Java WEB 参数正常,各项正常,无法从数据库获取结果?

clipboard.png
这是数据库

servlet代码
那个currentUser怎么查都是null。。。

    // 从request出获取要查询的数据并封装
    String userName = request.getParameter("userName");
    String password = request.getParameter("password");
    if (userName == null || userName.length() == 0 || password == null || password.length() == 0) {
        request.setAttribute("error", "用户名或密码不能为空!");
        request.getRequestDispatcher("userLogin.jsp").forward(request, response);
    }
    User user = new User(userName, password);

    // 查询并生成currentUser与currentStudent
    User currentUser = null;
    UserDao userDao = DaoFactory.createUserDao();
    Student currentStudent = null;
    StudentDao studentDao = DaoFactory.createStudentDao();
    
    try {
        currentUser = userDao.selectUser(user);
        // 验证
        if (currentUser != null) {
            
            //currentUser不为空,查询对应的currentStudent
            currentStudent = studentDao.selectStudent(currentUser);
            
            // 在session中保存currentUser与currentStudent
            HttpSession session = request.getSession();
            session.setAttribute("currentUser", currentUser);
            session.setAttribute("currentStudent", currentStudent);
            response.sendRedirect("userMain.jsp");
        } else {

            // 提示错误信息,同时将错误信息返回,优化用户体验
            request.setAttribute("error", "用户名或密码错误!");
            request.setAttribute("userName", userName);
            request.getRequestDispatcher("userLogin.jsp").forward(request, response);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        userDao.closeConn();
        studentDao.closeConn();
    }

标题文字

// 查找用户
public User selectUser(User user) throws SQLException {

    
    User resultUser = null;
    String sql = "select * from t_user where userName = ? and password = ?";
    PreparedStatement pstmt = conn.prepareStatement(sql);
    pstmt.setString(1, user.getUserName());
    pstmt.setString(2, user.getPassword());

    ResultSet rs = pstmt.executeQuery();

    // 要找也只会找到一个,所以这边就用if了
    //返回时带出id
    if (rs.next()) {
        resultUser = new User();
        resultUser.setId(rs.getInt("id"));
        resultUser.setUserName(rs.getString("userName"));
        resultUser.setPassword(rs.getString("password"));
    }

    return resultUser;

debug模式截图
图片描述
图片描述
图片描述
不开tomcat直接测试代码

public static void main(String[] args) throws SQLException {

    User user = new User("testUser1", "123456");
    UserDao userDao = DaoFactory.createUserDao();
    User currentUser = userDao.selectUser(user);
    System.out.println(currentUser.getId());
    userDao.closeConn();
}

clipboard.png

成功。。。。。。
在下已卒。

阅读 4.5k
5 个回答

所以建议查一下request传过来的用户名、密码到底是啥

我猜是tomcat里面没有jdbc的jar包,你把log都贴上,大家都看看,这样才好发现问题啊

请思考下面的问题:
1.
request.getParameter("userName");你传参数的时候userName 是中间大写的?我看不像。name="username"?
2.
测试方法只是表示你DAO没有问题,你数据库没有连错地方,数据库的表是能取到数据的。
3.
问题往往出现在源头上,不要纠结于过程,你的过程代码很稳当。也许你第一步就没取到。直接被forward了,你关注了吗?forward完了 继续跑 userName="",当然取不到,你又没有及时return。
4.
你打几个断点跑一下不就完啦,尤其是取参数。。

对于这类的问题,使用DeBug模式,多打几个断点,比如在selectUser里边的if处,还有其他的与相关数据可能牵扯到关系的位置

下断点debug就行了,看看哪里的参数错了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题