2012-05-25 5 views
-1

로그인 프로그램을 만들려고하고 있는데 GUI의 사용자 이름/암호를 데이터베이스와 상호 참조해야하는데 현재 코드가 있지만 "잘못된 사용자 이름/암호! ", 데이터베이스의 동일한 분량의 사람들에게. 실제로 작동하도록하는 데 도움이 될 것입니다. 내 코드는 아래와 같습니다.데이터베이스에 대한 교차 검사 정보

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

import java.sql.*; 

public class Login extends JFrame { 

    JTextField _username = new JTextField(10); 
    JPasswordField _password = new JPasswordField(10); 

    JButton _login = new JButton("Login"); 
    JButton _exit = new JButton("Exit"); 

    Toolkit kit = Toolkit.getDefaultToolkit(); 
    Dimension screenSize = kit.getScreenSize(); 
    int screenHeight = (int)screenSize.getHeight(); 
    int screenWidth = (int)screenSize.getWidth(); 

    public Login() { 
    super("Login to panel"); 
    setLayout(new GridLayout(3,2,1,1)); 

    add(new JLabel("Username:")); 
    add(_username); 

    add(new JLabel("Password:")); 
    add(_password); 

    add(_login); 
     _login.addActionListener(new LoginListener()); 
    add(_exit); 
     _exit.addActionListener(new ExitListener()); 

    setSize(250, 100); 
    //setLocation(screenWidth/3, screenHeight/3); 
    setLocation(500, 400); 
    setResizable(false); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setVisible(true); 
    } 

    public static void main(String[] args) { 
    new Login(); 
    } 

    public class LoginListener implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     Connection con; 
     Statement stmt; 
     ResultSet rs; 

     try { 
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
     con = DriverManager.getConnection("jdbc:odbc:collegesys","root","0blivi0n"); 

     stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); 
     rs = stmt.executeQuery("SELECT * FROM main"); 
     PreparedStatement loginTime = con.prepareStatement("UPDATE `main` WHERE ID = ?"); 

     while(rs.next()) { 
      if(_username.getText() == rs.getObject("username") && _password.getText() == rs.getObject("password")) { 
      dispose(); 
      new Panel(); 
      } else { 
      JOptionPane.showMessageDialog(null, "Incorrect Username/Password!"); 
      } 
     } 

     } catch(SQLException sqle) { 
     sqle.printStackTrace(); 
     } catch(ClassNotFoundException cnfe) { 
     cnfe.printStackTrace(); 
     } 
    } 
    } 

    public class ExitListener implements ActionListener { 
    public void actionPerformed(ActionEvent e) { 
     dispose(); 
     System.exit(0); 
    } 
    } 
} 

답변

0

문자열 비교에는 ==을 사용하지 마십시오. .equals 사용 : 자바는 문제의 설명에 본사를 둔 101

+0

이것은 내 프로그램 기능에 전혀 도움이되지 않습니까? –

+0

@ NathanKreider 사용자 이름과 비밀번호를 비교하는 방식이 이상하고 ==와 작동하지 않기 때문에 이상합니다. 더 많은 정보가 없으면 우리가 할 수있는 것이 많지 않습니다. 또한 사용자가 이미 선택할 수있는 데이터를 가지고있을 때 전체 사용자 데이터베이스를 살펴 보는 것은 매우 비효율적입니다. –

0

, 당신은 당신의 데이터베이스에서 레코드를 가지고있어 그래서 난이 명 변경

했다

==equals 기능과 비교하여 먼저 문자열을 비교하지 않는

두 번째로 낮추거나 내가 속에서의 싸움은 정말 당신이있어 무엇을 이해하지 못하는 말한대로이

if(_username.getText().toLowerCase().equals(rs.getObject("username").toLowerCase()) && _password.getText().toLowerCase().equals(rs.getObject("password").toLowerCase()) 

세 번째와 같은 상위 뭔가하는 두 개의 문자열을 가져하여 사건을 무시하고이 문자열을 비교 달성하려고하지만 왜 모든 레코드를 가져 오지 않고 매개 변수를 사용하여 쿼리를 만들려고했는데 왜 루프를 통과 했습니까?

+0

아니요, 작동하지 않습니다. 프로그램을 로그인하려고합니다. 텍스트 필드가 데이터베이스의 항목과 같으면 로그인 할 것이므로 데이터베이스를 상호 참조해야합니다. 그러나 아무것도 나를 위해 일할 것이다. –

+0

그리고 사용자 이름과 passwor exit가 데이터베이스에 있는지 확인 하시겠습니까? – Jorge

+0

예, 확실합니다. 세부 사항을 입력하는 동안 데이터베이스를보고 있습니다. 나는 또한 많은 다른 사용자 이름과 암호를 시도했습니다. –

관련 문제