2016-12-20 11 views
0

SQL (mySQL workbench) 및 Java (Eclipse)로 간단한 로그인 데이터베이스를 구성하려고합니다. 다른 문자열에 대해서도 SQL에서 데이터베이스에 대해 문자열 입력 (JTextField 및 JPasswordField)을 테스트하는 방법을 모르겠습니다.JPanel에서 사용자 입력을 테스트하는 방법은 무엇입니까?

로그인 자격 증명이 지정된 문자열과 같으면 Java에서 명령문을 출력하고 싶습니다. 나는 .getText()와 .getSelectedText() 메소드를 사용하여 각 userText/passwordText의 텍스트를 얻는 시도

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


} 

} 

: 여기에 내 현재 코드입니다.

당신은 준비된 성명에서 매개 변수로 사용자 이름과 암호를 전달하고 사용하여 일치 여부를 확인 후 다시 실행해야
+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

사용자 이름에 "문자열"을 사용하고 비밀번호에 "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

신속하고 유용한 답변을 주셔서 대단히 감사합니다. 나는 그것을 시험 할 것이다. –