2016-12-20 1 views
0

Ich versuche, eine einfache Login-Datenbank mit SQL (mySQL-Workbench) und Java (Eclipse) zu bilden. Ich bin mir nicht sicher, wie man die Zeichenfolgeneingabe (JTextField und JPasswordField) gegen die Datenbank in SQL sogar gegen irgendwelche anderen Zeichenketten prüft.Wie kann man Benutzereingaben von einem JPanel testen?

Ich möchte, dass Java eine Anweisung ausgibt, wenn die Anmeldedaten den angegebenen Zeichenfolgen entsprechen. Hier ist meine aktuellen Code:

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); 


} 

} 

Ich habe versucht, immer den Text in jedem Usertext/passwordText durch die .getText mit() und .getSelectedText() Methoden.

+0

Und wo genau stecken Sie fest? – GhostCat

+0

@GhostCat Ich war fest auf, wie man mit der Taste eine Klasse aufrufen, die den Benutzernamen und das Passwort gegen Einsen in den SQL-Datenbanken überprüfen würde. –

Antwort

0

Sie sollten den Benutzernamen und das Passwort als Parameter in der vorbereiteten Anweisung und führen Sie es dann prüfen, ob es eine Übereinstimmung mit Pass:

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 
    } 
} 

Dann fügen Sie die Veranstaltung auf die Schaltfläche:

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

Warum müssen wir "String" für den Benutzernamen und "char []" für das Passwort verwenden? Liegt es daran, dass wir ein Passwortfeld verwenden? Ich schätze deine Antwort. –

1

Wenn ich richtig verstanden habe, dann müssen Sie ein Passwort erhalten, wenn Sie auf die Schaltfläche Login klicken.

Bitte fügen Sie den folgenden Code in placeComponents Methode nach der Initialisierung der Schaltfläche.

loginB.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      char[] pass = passwordText.getPassword(); 
      System.out.println(pass); 
     } 
    }); 

Aktion Listener sind wahrscheinlich die einfachsten - und am häufigsten - Ereignishandler zu implementieren. Sie implementieren einen Aktionslistener, um festzulegen, was bei bestimmten Aktionen eines Benutzers ausgeführt werden soll.

Sie können mehr über ActionListener here lesen.

Sie können this example verweisen, um zu sehen, wie man Kennwortfeld verwendet.

+0

Vielen Dank für die schnelle und nützliche Antwort. Ich werde es ausprobieren. –

Verwandte Themen