2017-04-07 95 views
0

在将其标记为重复之前,请注意,我查看了关于在stackoverflow上存在的空指针异常的线程。不幸的是,我还没有设法解决这个问题,如果有人能指引我走向正确的方向,我会感激不尽,因为我现在陷入了一段时间。Java/MySQL准备语句错误

我正在一个错误

显示java.lang.NullPointerException在 sample.LoginWindow.setBtnLogin(LoginWindow.java:39))点在 以下行了PreparedStatement.setString(1,txtUserName.getText ()

我有DBUtilities类握住我的数据库连接,并关闭一些方法:

public class DBUtilities { 
    // Getting connection to the database. 
    public static Connection getConnection() throws SQLException { 
     String url = "jdbc:mysql://localhost:3306/studentmanagementdb"; 
     String user = "admin"; 
     String pass = "administrator"; 
     Connection connection = DriverManager.getConnection(url, user, pass); 
     return connection; 
    } 
    // Close prepared statement. 
    public static void closePreparedStatement(PreparedStatement pStmt) { 
     try { 
      if(pStmt != null) { 
       pStmt.close(); 
      } 
     }catch(SQLException sExepction) { 
      showErrorMsg("SQL Database Error:", "Prepared Statement could not be closed."); 
     } 
    } 
    // Close result set. 
    public static void closeResultSet(ResultSet resSet) { 
     try { 
      if (resSet != null){ 
       resSet.close(); 
      } 
     }catch (SQLException sException) { 
      showErrorMsg("SQL Database Error:", "Result Set could not be closed."); 
     } 
    } 
    public static void closeConnection(Connection connect) { 
     try { 
      if(connect != null) { 
       connect.close(); 
      } 
     }catch (SQLException sException) { 
      showErrorMsg("SQL Database Error:", "Database Connection could not be close."); 
     } 
    } 
    // Shows error message. 
    public static void showErrorMsg(String title, String msg) { 
     Platform.runLater(() -> { 
      Alert alert = new Alert(Alert.AlertType.ERROR); 
      alert.setTitle(title); 
      alert.setHeaderText(msg); 
      alert.setWidth(200); 
      alert.setHeight(200); 
      alert.showAndWait(); 
     }); 
    } 
} 

类,它使用的连接:

public class LoginWindow implements Initializable{ 

    @FXML 
    private TextField txtUserName; 
    @FXML 
    private PasswordField txtPassword; 
    @FXML 
    private Button btnLogin; 

    Connection connection = null; 
    PreparedStatement preparedStatement = null; 
    ResultSet resultSet = null; 
    DBUtilities dbUtil = new DBUtilities(); 



    // Setting the login button. 
    @FXML 
    private void setBtnLogin(ActionEvent event) { 

     try { 
      connection = dbUtil.getConnection(); 
      String sqlQuery = "SELECT * FROM 'User_Login_Details' WHERE 'User_Name' = ? AND 'User_Password' = ?"; 
      connection.prepareStatement(sqlQuery); 
      preparedStatement.setString(1, txtUserName.getText()); 
      preparedStatement.setString(2, txtPassword.getText()); 
      resultSet = preparedStatement.executeQuery(); 

     }catch (Exception exception) { 
      //dbUtilities.showErrorMsg("Database Connection Error:", "Could not connect to the database."); 
      exception.printStackTrace(); 
     }finally { 
      dbUtil.closePreparedStatement(preparedStatement); 
      dbUtil.closeResultSet(resultSet); 
      dbUtil.closeConnection(connection); 
     } 
    } 
    @Override 
    public void initialize(URL location, ResourceBundle resources) { 
     btnLogin.setOnAction(this::setBtnLogin); 
    } 
} 
+0

'preparedStatement' not initialised – Satya

+0

PreparedStatement preparedStatement = null;然后connection.prepareStatement(sqlQuery);.这是不够的?对不起,我是mySQL的新手。 – helloumarian

+1

它返回一个PreparedStatement。你需要捕捉它。 https://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#prepareStatement(java.lang.String) –

回答

1
preparedStatement = connection.prepareStatement(sqlQuery); 

创建用于发送参数的SQL语句到数据库的PreparedStatement对象。

+0

非常感谢! – helloumarian

0

初始化准备语句,如下

preparedStatement时=各种Connection.prepareStatement(的SQLQuery);

+0

虽然这段代码片段是受欢迎的,并且可能会提供一些帮助,但它会[如果它包含一个解释](/ meta.stackexchange.com/q/114762)* [如何解决该问题]会[大大改进]。没有这些,你的答案就没有什么教育价值了 - 记住,你正在为将来的读者回答这个问题,而不仅仅是现在问的人!请编辑您的答案以添加解释,并指出适用的限制和假设。 –