2016-12-20 5 views
0

Я пытаюсь создать простую базу данных для входа с SQL (mySQL workbench) и Java (Eclipse). Я не уверен, как проверить ввод строки (JTextField и JPasswordField) на базу данных в SQL даже против любых других строк.Как можно протестировать ввод пользователя из JPanel?

Я бы хотел, чтобы Java распечатала заявление, если учетные данные для входа равны указанным строкам. Вот мой текущий код:

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


} 

} 

Я пытался получать текст в каждой userText/passwordText с помощью .getText() и .getSelectedText() методы.

+0

И где именно вы застряли? – GhostCat

+0

@GhostCat Я зациклился на том, как использовать кнопку для вызова класса, который проверял бы имя пользователя и пароль на те, которые содержатся в базах данных SQL. –

ответ

0

Вы должны передать имя пользователя и пароль в качестве параметров в подготовленном операторе и выполнить его, то проверьте, есть ли совпадение с помощью:

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

Тогда Добавить событие кнопки:

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

Почему мы должны использовать «String» для имени пользователя и «char []» для пароля? Это потому, что мы используем поле пароля? Я ценю ваш ответ. –

1

Если я правильно понял, вам нужно получить пароль, когда вы нажимаете кнопку Login.

Пожалуйста, добавьте ниже код в placeComponents метод после инициализации кнопки.

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

Слушатели событий, вероятно, являются самыми легкими и наиболее распространенными обработчиками событий для реализации. Вы реализуете прослушиватель действий, чтобы определить, что должно быть сделано, когда пользователь выполняет определенную операцию.

Подробнее о ActionListener here.

Вы можете обратиться к this example, чтобы узнать, как использовать поле пароля.

+0

Большое спасибо за быстрый и полезный ответ. Я проверю это. –