交叉检查数据库的信息

时间:2012-05-25 01:55:42

标签: java database

我正在尝试创建一个登录程序,我需要将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);
    }
  }
}

2 个答案:

答案 0 :(得分:0)

不要使用==来比较字符串;使用.equals:Java 101。

答案 1 :(得分:0)

根据您的问题描述,您将从数据库中提取记录,因此我进行了两次更改

首先不要将字符串与==进行比较,与equals函数进行比较

第二次比较这个字符串,忽略这种情况,将两个字符串置于较低或较高的位置,如此

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

第三,正如我所说,我真的不明白你想要实现什么,但为什么你只是试图用参数创建你的查询而不是带来所有记录并循环通过它们?