2016-11-25 2 views
0

J'essaie de créer une application qui nécessite une connexion utilisateur. J'ai utilisé SceneBuilder et le fichier FXML pour l'interface. Je dois maintenant récupérer les données d'une base de données SQLite (j'ai nommé la table avec les données comme "Utilisateurs"). Quand je lance ce programme, il lance une exception NullPointerException (j'ai déjà des données stockées sur la table). Comment je le répare?La référence à la table "Users" dans ma base de données génère une exception NullPointerException. Comment puis-je le réparer?

//P.S. J'utilise IntelliJ pour éditer la base de données depuis l'IDE lui-même.

enter image description here

package sample; 

import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Node; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.control.Label; 
import javafx.scene.control.TextField; 
import javafx.scene.text.Text; 
import javafx.stage.Stage; 

import java.io.IOException; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 

public class Controller { 

    @FXML TextField username; 
    @FXML TextField password; 
    @FXML Label warning; 
    Connection c; 
    PreparedStatement pst; 
    ResultSet rs; 

    public void loginButtonClicked() throws IOException { 
     try { 
      String query = "select * from Users where Username=? and Password=?"; 
      pst = c.prepareStatement(query); 
      pst.setString(1, username.getText()); 
      pst.setString(2, password.getText()); 
      rs = pst.executeQuery(); 

      if (rs.next()) { 
       warning.setText("Successful"); 
      } else { 
       warning.setText("Not Successful"); 
      } 

     } catch (Exception e) { 
      System.err.println(e); 
     } 
    } 


    public void cancelButtonClicked(ActionEvent event) throws IOException { 
     System.out.println("User has cancelled login..."); 

     ((Node)event.getSource()).getScene().getWindow().hide(); 
    } 
} 
+0

Vous n'avez jamais [obtenir une connexion à la base de données] (https://docs.oracle.com/javase/tutorial/jdbc/basics/connecting.html) ('c' est nul). Voir aussi: [Comment fonctionne l'injection SQL de la BD XKCD "Bobby Tables"?] (Http://stackoverflow.com/questions/332365/how-does-the-sql-injection-from-the-bobby-tables -xkcd-comic-work) et [Comment éviter l'injection SQL et d'autres échecs de sécurité dans l'application de bureau JavaFX] (http://stackoverflow.com/questions/28109969/how-to-avoid-sql-injection-and-other- security-failure-in-javafx-desktop-applicat) – jewelsea

+0

Salut! Merci beaucoup pour les commentaires. J'ai une méthode dans la classe principale pour vérifier la connexion. J'ai essayé le code sans utiliser FXML (en utilisant juste javafx) et cela a fonctionné parfaitement. Pourrait-il y avoir un autre problème? J'apprécierais beaucoup si vous pouviez l'exécuter dans un IDE et résoudre le problème. J'ai une date limite pour me rencontrer et je n'ai aucune idée de ce qui ne va pas. – Karthik

Répondre

0

Vous devez fermer votre connexion à l'instruction try ajouter après les autres pst. Fermer(); rs. Fermer();

+0

Veuillez clarifier votre réponse avec (a) un code (extrait). – Odrai