有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

关于JSP和SQL的问题。Java web应用程序

我最近正在制作一个Java web应用程序,它必须关注CRUD(你知道)。但我被困在了阅读&阅读;更新及;删除操作(三个操作)。只有创建操作才能正常工作。具体来说,我正在开发的Java web应用程序到目前为止还没有完成。在我的代码中,名为“findUsers”的函数用于实现读取操作。顺便说一下,我已经检查了很长一段时间的代码。我猜问题可能出在findUsers函数中(不确定,只是一个假设)。每次我试图键入R来调用该函数时,Netbeans都会返回“用户不存在”。我不知道为什么。此外,数据库连接成功enter image description here这张照片是我的数据库结构

DBManager。爪哇

//read operation
   public User findUsers(String email, String password) throws SQLException {
    String sqll = "SELECT * FROM XWB.USERS WHERE EMAIL = ' " + email + " ' AND PASSWORD = ' " + password + " ' ";
    // " SELECT * FROM XWB.USERS WHERE EMAIL = ' " + email + " ' AND PASSWORD = ' " + password + " ' "; 
    //select * from XWB.Users where EMAIL = 'TargetEmail' and PASSWORD = 'TargetPassword';
    ResultSet rs = st.executeQuery(sqll);

    while (rs.next()) {
        String UserEmail = rs.getString("EMAIL");
        String UserPassword = rs.getString("PASSWORD");
        if (UserEmail.equals(email) && UserPassword.equals(password)) {
            String UserName = rs.getString("NAME"); 
            String UserGender = rs.getString("GENDER");
            String UserColor = rs.getString("FAVOURITECOLOR");
            return new User(UserEmail, UserName, UserPassword, UserGender, UserColor);
        }
    }
    return null;
}

TestDB。java(我使用这个类来测试DBManager)

 // findUsers()
    private void testRead() throws SQLException {
        System.out.print("User email: ");
        String email = in.nextLine();
        System.out.print("User password: ");
        String password = in.nextLine();
        User user = db.findUsers(email, password); // returns nothing
        //System.out.println(user);
        if( user != null) {
            System.out.println("User " + user.getName() + " exists in the database.");
        }else { //user == null
            System.out.println("User does not exit.");
        }
    }

这是我从Netbeans得到的结果。它总是告诉我“用户不存在” enter image description here


共 (2) 个答案

  1. # 1 楼答案

    在代码中有return null,因此当调用类中的这个get检查if( user != null)将返回false,并且if-statementelse部分将被执行。因此,要克服以下变化:

    您的方法如下所示:

    User user; //create class object
    String sqll = "SELECT * FROM XWB.USERS WHERE EMAIL = ? AND PASSWORD = ? ";
    PreparedStatement ps = con.prepareStatement(
     sqll);
    //setting value for "?" 
    ps.setString(1, email);
    ps.setString(2, password);
    //execute query
    ResultSet rs = ps.executeQuery();
    //if found
    if (rs.next()) {
     //fetch
     String UserEmail = rs.getString("EMAIL");
     String UserPassword = rs.getString("PASSWORD");
     String UserName = rs.getString("NAME");
     String UserGender = rs.getString("GENDER");
     String UserColor = rs.getString("FAVOURITECOLOR");
     //pass in constructor
     user = new User(UserEmail, UserName, UserPassword, UserGender, UserColor);
    } else {
     //set the object to null (no match)
     user = null;
    }
    //send object back
    return user;
    
  2. # 2 楼答案

    如果您的电子邮件和密码的数据值正确,我认为您应该删除[']字符前后的空格。 您的代码:

     String sqll = "SELECT * FROM XWB.USERS WHERE EMAIL = ' " + email + " ' AND PASSWORD = ' " + password + " ' ";
    

    替换:

     String sqll = "SELECT * FROM XWB.USERS WHERE EMAIL = '" + email + "' AND PASSWORD = '" + password + "' ";