2016-12-20 1 views
0

J'essaye de former une simple base de données de connexion avec SQL (mySQL workbench) et Java (Eclipse). Je ne suis pas sûr de savoir comment tester l'entrée de chaîne (JTextField et JPasswordField) par rapport à la base de données dans SQL même sur d'autres chaînes.Comment tester l'entrée d'un utilisateur à partir d'un JPanel?

Je voudrais que Java imprime une instruction si les informations de connexion sont égales aux chaînes spécifiées. Voici mon code actuel:

import javax.swing.*; 
import java.sql.*; 


public class Hello1 extends JFrame { 




private static final long serialVersionUID = 1487932324102279819L; 


public static void main(String[] args) { 

    JFrame frame = new JFrame("Frame Demo"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(350,200); 



    JPanel panel = new JPanel(); 
    frame.add(panel); 
    placeComponents(panel); 

    frame.setVisible(true); 

    String username0 = "java"; 
    String password = "password"; 

    Statement stmt = null; 
    try{ 
     String url = "jdbc:mysql://localhost:3306/javabase?useSSL=false"; 
     Connection connection = DriverManager.getConnection(url, username0, password); 
     stmt = connection.createStatement(); 
     ResultSet rs; 
     rs = stmt.executeQuery("SELECT * from userids "); 
     while(rs.next()) { 
      String user = rs.getString("username"); 
      String pass = rs.getString("paswrd"); 
      System.out.println(user); 
      System.out.println(pass); 
     } 
     connection.close(); 

     } 

     catch (Exception e) { 
      System.err.println("Got an exception! "); 
      System.err.println(e.getMessage()); 
     } 
    } 



private static void placeComponents(JPanel panel) { 

    panel.setLayout(null); 
    JLabel userLabel = new JLabel("Username"); 
    userLabel.setBounds(10,20,80,25); 
    panel.add(userLabel); 

    JTextField userText = new JTextField(20); 
    userText.setBounds(100, 20, 165, 25); 
    panel.add(userText); 
    String user = userText.getText();  

    JLabel passwordLabel = new JLabel("Password"); 
    passwordLabel.setBounds(10,50,80,25); 
    panel.add(passwordLabel); 

    JPasswordField passwordText = new JPasswordField(20); 
    passwordText.setBounds(100,50,165,25); 
    panel.add(passwordText); 
    String pass = passwordText.getSelectedText(); 

    if(user.equals('b') && pass.equals('t')){ 
     System.out.println("Correct Login"); 
    } 
    System.out.println(pass); 

    JButton loginB = new JButton("Login"); 
    loginB.setBounds(10, 80, 80, 25); 
    panel.add(loginB); 


} 

} 

J'ai essayé d'obtenir le texte dans chaque userText/passwordText en utilisant les méthodes .getText() et .getSelectedText().

+0

Et où êtes-vous exactement? – GhostCat

+0

@GhostCat J'étais bloqué sur comment utiliser le bouton pour appeler une classe qui vérifierait le nom d'utilisateur et mot de passe contre ceux dans les bases de données SQL. –

Répondre

0

Vous devez passer le nom d'utilisateur et mot de passe en tant que paramètres dans l'instruction préparée et l'exécuter vérifier ensuite s'il y a un match à l'aide:

public void login(String user,String pass){ 
    String url = "jdbc:mysql://localhost:3306/javabase?useSSL=false"; 
    Connection connection = DriverManager.getConnection(url, username0, password); 
    PreparedStatement stmt = connection.prepareStatement("SELECT * from userids where username=? and password=? "); 
    stmt.setString(1, user); 
    stmt.setString(2, pass); 
    ResultSet rs= stmt.executeQuery(); 

    if(rs.hasNext()){ 
    //continue with operation 
    }else{ 
    //show user doesn't exist 
    } 
} 

Puis Ajouter l'événement au bouton:

loginB.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
String user = userTextBox.getText().toString(); 
char[] pass = passwordText.getPassword(); 
      login(user,pass); 
     } 
    }); 
+0

Pourquoi devons-nous utiliser "String" pour le nom d'utilisateur et "char []" pour le mot de passe? Est-ce parce que nous utilisons un champ de mot de passe? J'apprécie ta réponse. –

1

Si je comprends bien, alors vous devez obtenir le mot de passe quand vous cliquez sur le bouton Login.

Veuillez ajouter le code ci-dessous dans la méthode placeComponents après avoir initialisé le bouton. Les écouteurs d'action sont probablement les plus simples - et les plus courants - à mettre en œuvre. Vous implémentez un écouteur d'action pour définir ce qui doit être fait lorsqu'un utilisateur effectue certaines opérations.

Vous pouvez en savoir plus sur ActionListener here.

Vous pouvez vous référer à this example pour voir comment utiliser le champ de mot de passe.

+0

Merci beaucoup pour la réponse rapide et utile. Je vais le tester. –