报错:"java.sql.ResultSet.next()" because "rs" is null 这是什么问题呀

要求:用javabean实现用户登录,但是数据库里有数据还是显示null
login1.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>用户登录</title>
    <script type="text/javascript">
    
      function check(){
       if(document.all.userName.value==""){
        alert("对不起,用户名不能为空值!");
       }
       if(document.all.userPwd==""){
        alert("对不起,密码不能为空值!")
        return false;
       }
       return true;
      }    
    </script>
  </head>
<body>
<form action="chkuser.jsp" name ="form1" method="pos" onSumbit="return cheek()"> 
              登录账号: 
              <input type="text" id="userName" name ="userName"/><br/>
              登录密码:
              <input type="text" id="userPwd" name="userPwd" /><br/>
              <input type="submit" name="submit" value="提交"/>
              <input type="reset" name="reset" value="重设"/>
 </form>
  </body>
</html>

chkuser.jsp

<%@ page language="java"  import="java.util.*" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page import="java.sql.*"%>
<%@ page import="bean.DBBean"%>
<%@ page import="bean.UserBean"%>
 
<jsp:useBean id="myDBbean" class="bean.DBBean"></jsp:useBean>
 <jsp:useBean id="user" class="bean.UserBean" scope="session"></jsp:useBean>
<jsp:setProperty name="user" property="*" />
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>用户登录验证</title>
</head>
<body>
    <h2>用户登录验证</h2>
    <hr>
    <%

        String userName = user.getUserName();
        String userPwd = user.getUserPwd();
        String sql = "select * from user where userName='"+userName+"' and userPwd='"+userPwd+"'";
        if (user.isLogined()){
            out.println("您已经登录过了!");
        }else{
            ResultSet rs = myDBbean.query(sql);
            if (rs.next()){
                user.setLogined(true);
                out.println("恭喜您登录成功!");
            }else{
                user.setLogined(false);
                out.println("对不起,您的帐号或密码不正确!");
            }                    
        }                   
    %>
  </body>
</html>

DBBean.java

package bean;

 import java.sql.*;
 
public class DBBean {
 
    Connection con = null;
    Statement stat = null;
    PreparedStatement pstat = null;
    ResultSet rs = null;
    

    public DBBean() {}
    

    public Connection getCon(){
        try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String url = "jdbc:sqlserver://localhost:1433;DatabaseName=Test;user=sa;password=student123456";
            con = DriverManager.getConnection(url);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return con;        
    }
    public ResultSet query(String sql){
        try{
            con = getCon();
            stat = con.createStatement();
            rs = stat.executeQuery(sql);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return rs;
    }
    
    public void update(String sql){
        try{
            con = getCon();
            stat = con.createStatement();
            stat.executeUpdate(sql);
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
 
    public void update(String sql,String[] args){
        try{
            con = getCon();
            pstat = con.prepareStatement(sql);
            for (int i=0;i<args.length;i++){
                pstat.setString(i+1,args[i]);
            }
            pstat.executeUpdate();
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
    
    
    public void close(){
        try{
            if (rs != null)rs.close();
            if (stat != null)stat.close();
            if (pstat != null)pstat.close();
            if (con != null)con.close();
        }catch(Exception ex){
            ex.printStackTrace();
        }        
    }    
    
}

UserBean.java

package bean;
public class UserBean {    
    String userName = null;
    String userPwd = null;
    boolean logined = false;
    
    public UserBean(){
    
    }
    
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getUserPwd() {
        return userPwd;
    }
    public void setUserPwd(String userPwd) {
        this.userPwd = userPwd;
    }
    public boolean isLogined() {
        return logined;
    }
    public void setLogined(boolean logined) {
        this.logined = logined;
    }
}

数据库里也有数据,名字也都是对应的

img

rs返回的是null
那么你没做非空判断直接执行rs.next()肯定报错呀

这个之前加个非空判断

if(rs!=nulll){
   if (rs.next()){xxxxxxxxxx
}
         



img

确认一下这条语句能查到数据:select * from user where userName='"+userName+"' and userPwd='"+userPwd+"'"
另外密码记得加个密再存,养成习惯很重要。可与用户名拼接起来一起加密,防止相同密码被人猜出。