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

2 に答える 2

0

==文字列の比較には使用しないでください。使用.equals:Java101。

于 2012-05-25T02:03:29.747 に答える
0

問題の説明に基づいて、データベースからレコードを取得しているので、2 つの変更を加えました

最初に文字列を関数と==比較して比較しないでくださいequals

次に、大文字と小文字を区別せずにこの文字列を比較して、2 つの文字列を下または上に移動します。

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

3番目に、あなたが達成しようとしていることを本当に理解していませんが、すべてのレコードを取得してループするのではなく、パラメーターを使用してクエリを作成しようとしたのはなぜですか??

于 2012-05-25T02:09:30.223 に答える