它告诉我“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;
}
1条答案
按热度按时间m528fe3b1#
如果您格式化您的代码以便更易于阅读,您将看到该方法
getUser()
,在课堂上dbHandler
,如果用户名和密码都为空,则返回null。在这种情况下,您只需在屏幕上打印“error”并继续。您可以确定这两个值永远不会为空,但编译器不知道这一点。如果用户名和密码都为空时出现错误,则抛出Exception
.换掉这条线怎么样
具有