resultset可能为空,如何修复?

x6492ojm  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(443)

它告诉我“userrow”结果集可能是空的,你们知道我该如何解决这个问题或者为什么会这样,我会非常感激,谢谢。
它告诉我添加更多的细节:我创建这个resultset方法是为了从mysql数据库中检索我用mysql workbench创建的信息,我试图检索用户表、用户名和密码的信息,因此它将从这两列中获取信息,然后检查数据库并允许登录。但是它给了我一个例外,resultset可能为null,我还指出了错误在代码中的具体位置。
感谢您的帮助。
谢谢。
以下是我的两个课程:

public class Login {

@FXML
private TextField userNameTextField;

@FXML
private PasswordField passwordPasswordField;

@FXML
private Button signUpButton;

@FXML
private Button loginButton;

private sample.database.dbHandler dbHandler;

@FXML
void initialize() {

    dbHandler = new dbHandler();

    loginButton.setOnAction(event -> {

        String loginText = userNameTextField.getText().trim();
        String loginPassword = passwordPasswordField.getText().trim();

        User user = new User();
        user.setUsername(loginText);
        user.setPassword(loginPassword);

        ResultSet userRow = dbHandler.getUser(user);

        int counter = 0;

        try {

            while (userRow.next()) { //it says that "userRow" could possibly be null

                counter++;

            }

            if (counter == 1) {

                System.out.println("Logged in");

            }

        } catch (SQLException e) {

            e.printStackTrace();

        }

    });

    signUpButton.setOnAction(event -> {

        signUpButton.getScene().getWindow().hide();

        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(getClass().getResource("/sample/signup.fxml"));

        try {

            loader.load();

        } catch (IOException e) {

            e.printStackTrace();

        }

        Parent root = loader.getRoot();
        Stage stage = new Stage();
        stage.setScene(new Scene(root));
        stage.showAndWait();

    });

}
public class dbHandler extends Config {

java.sql.Connection Connection;

public Connection getConnection() throws ClassNotFoundException, SQLException {

    String connectionString = "jdbc:mysql://" + dbHost + ":" + dbPort + "/" + dbName;

    Class.forName("com.mysql.cj.jdbc.Driver");

    Connection = DriverManager.getConnection(connectionString, dbUser, dbPass);

    return Connection;

}

public void signUp(User user) {

    String insert = "INSERT INTO " + Constants.USERS_TABLE + "(" + Constants.USERS_FIRSTNAME + "," + Constants.USERS_LASTNAME + "," +
            Constants.USERS_USERNAME + "," + Constants.USERS_PASSWORD + ")" + "VALUES(?,?,?,?)";

    try {

        PreparedStatement preparedStatement = getConnection().prepareStatement(insert);

        preparedStatement.setString(1, user.getFirstName());
        preparedStatement.setString(2, user.getLastName());
        preparedStatement.setString(3, user.getUsername());
        preparedStatement.setString(4, user.getPassword());

        preparedStatement.executeUpdate();

    } catch (SQLException e) {

        e.printStackTrace();

    } catch (ClassNotFoundException e) {

        e.printStackTrace();

    }

}

public ResultSet getUser(User user) {

    ResultSet resultSet = null;

    if (!user.getUsername().equals("") || !user.getPassword().equals("")) {

        String query = "SELECT * FROM " + Constants.USERS_TABLE + " WHERE " + Constants.USERS_USERNAME + "=?"
                + " AND " + Constants.USERS_PASSWORD + "=?";

    try {

        PreparedStatement preparedStatement = getConnection().prepareStatement(query);
        preparedStatement.setString(1, user.getUsername());
        preparedStatement.setString(2, user.getPassword());

        preparedStatement.executeQuery();

    } catch (SQLException e) {

        e.printStackTrace();

    } catch (ClassNotFoundException e) {

        e.printStackTrace();

    }

    } else {

        System.out.println("Error");

    }

    return resultSet;

}
m528fe3b

m528fe3b1#

如果您格式化您的代码以便更易于阅读,您将看到该方法 getUser() ,在课堂上 dbHandler ,如果用户名和密码都为空,则返回null。在这种情况下,您只需在屏幕上打印“error”并继续。您可以确定这两个值永远不会为空,但编译器不知道这一点。如果用户名和密码都为空时出现错误,则抛出 Exception .

public ResultSet getUser(User user) {
    ResultSet resultSet = null;
    if (!user.getUsername().equals("") || !user.getPassword().equals("")) {
        String query = "SELECT * FROM " + Constants.USERS_TABLE + " WHERE "
                + Constants.USERS_USERNAME + "=?" + " AND " + Constants.USERS_PASSWORD + "=?";
        try {
            PreparedStatement preparedStatement = getConnection().prepareStatement(query);
            preparedStatement.setString(1, user.getUsername());
            preparedStatement.setString(2, user.getPassword());
            preparedStatement.executeQuery();
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
        catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    else {
        System.out.println("Error");
    }
    return resultSet;
}

换掉这条线怎么样

System.out.println("Error");

具有

throw new RuntimeException("Missing username and/or password.");

相关问题