![](/img/trans.png)
[英]How do I in JDBC read a possibly null double value from resultSet?
[英]ResultSet could be possibly null, how to fix this?
它告诉我“userRow”ResultSet 可能为空,你们知道我该如何解决这个问题或为什么会发生这种情况,我将不胜感激,谢谢。
它告诉我添加更多细节:我创建了这个 ResultSet 方法,以便从我用 MySQL Workbench 创建的 MySQL 数据库中检索信息,我试图检索 USER_TABLE、用户名和密码的信息,所以它会得到来自这两列的信息,然后检查数据库并允许登录。 但它一直给我一个异常,即 ResultSet 可能为空,我还在代码中指出了错误的具体位置。
任何形式的帮助表示赞赏。
谢谢。
这是我与该问题相关的两个类:
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;
}
如果您格式化代码以使其更易于阅读,您将看到dbHandler
类中的getUser()
方法将在用户名和密码均为空时返回 null。 在这种情况下,您只需在屏幕上打印“错误”并继续。 您可能确定这两个值永远不会为空,但编译器不知道这一点。 如果用户名和密码都为空时出错,则抛出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.");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.