java - 如何在 Gui 程序中实现 JDBC 数据库以验证登录程序的用户和密码

标签 java authentication jdbc passwords

我目前正在制作一个 gui 程序,我不知道如何设置我的程序,因此当用户输入用户名和密码,然后单击登录按钮时,它会检查数据库中的用户名和密码,如果用户名和密码在数据库中,则他们接受(如果没有拒绝)。

这是我的欢迎屏幕,目前它很糟糕,我打算清理它。

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

/**
 *
 * @author 
 */
public class Welcome extends JFrame {

    private JButton Existing, New, Exit;
    private JLabel Welcome, Date, Version;
    private JPanel WelcomeP;
    private JMenuItem jmiNew, jmiExisting, jmiExit, jmiAbout;

    public Welcome() {
        //create menu bar
        JMenuBar regMenuBar = new JMenuBar();

        //set menu bar to the applet
        setJMenuBar(regMenuBar);
        //add menu "operation" to menu bar
        JMenu optionsMenu = new JMenu("Options");
        optionsMenu.setMnemonic('O');
        regMenuBar.add(optionsMenu);

        //add menu "help"
        JMenu helpMenu = new JMenu("Help");
        helpMenu.setMnemonic('H');
        helpMenu.add(jmiAbout = new JMenuItem("About", 'A'));
        regMenuBar.add(helpMenu);

        //add menu items with mnemonics to menu "options"
        optionsMenu.add(jmiNew = new JMenuItem("New", 'N'));
        optionsMenu.add(jmiExisting = new JMenuItem("Existing", 'E'));
        optionsMenu.addSeparator();
        optionsMenu.add(jmiExit = new JMenuItem("Exit", 'E'));


        Container c = getContentPane();
        c.setLayout(new BorderLayout());

        WelcomeP = new JPanel();
        WelcomeP.setLayout(new GridLayout(2, 1));


        Welcome = new JLabel("Welcome");
        Date = new JLabel("Date: 01/10/2013");
        Version = new JLabel("Version 0.1");
        Exit = new JButton("Exit");
        Existing = new JButton("Existing User");
        New = new JButton("New User");
        
        WelcomeP.add(Welcome);
        WelcomeP.add(Date);
        WelcomeP.add(Version);
        WelcomeP.add(Existing);
        WelcomeP.add(Exit);
        WelcomeP.add(New);


        Exit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        New.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                registerInterface regFace = new registerInterface();
                regFace.setVisible(true);
                Welcome.this.dispose();
                Welcome.this.setVisible(false);

            }
        });
        Existing.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                log login = new log();
                login.setVisible(true);
                login.setSize(500, 300);
                Welcome.this.dispose();
                Welcome.this.setVisible(false);

            }
        });
        jmiExit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        jmiNew.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                registerInterface regFace = new registerInterface();
                regFace.setVisible(true);
                Welcome.this.dispose();
                Welcome.this.setVisible(false);

            }
        });
        jmiExisting.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                log shoeFace = new log();
                shoeFace.setVisible(true);
                shoeFace.setSize(500, 300);
                Welcome.this.dispose();
                Welcome.this.setVisible(false);

            }
        });
        //listner for about menuitem
        jmiAbout.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                JOptionPane.showMessageDialog(null, 
                    "Program Dedicated to researchers of eAgriculture"
                                        + "\n Assignment for University", 
                        "About", JOptionPane.INFORMATION_MESSAGE);
            }
        });
        c.add(WelcomeP, BorderLayout.CENTER);

        setSize(500, 300);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    public static void main(String[] args) {
        Welcome app = new Welcome();
    }
}

当我单击现有用户时,它会将我带到登录面板:

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

class Login {
//  public static void main(String arg[])
//  {
//      log frame=new log();
//      frame.setSize(500,500);
//      frame.setLocationRelativeTo(null);
//      frame.setVisible(true);     
//  }
}

class log extends JFrame {

    private JTextField jtfUsername, jtfPassword;
    private JButton backButton, loginButton;
    private JMenuItem jmiLogin, jmiBack, jmiHelp, jmiAbout;

    log() {
        //create menu bar
        JMenuBar jmb = new JMenuBar();

        //set menu bar to the applet
        setJMenuBar(jmb);

        //add menu "operation" to menu bar
        JMenu optionsMenu = new JMenu("Options");
        optionsMenu.setMnemonic('O');
        jmb.add(optionsMenu);

        //add menu "help"
        JMenu helpMenu = new JMenu("Help");
        helpMenu.setMnemonic('H');
        helpMenu.add(jmiAbout = new JMenuItem("About", 'A'));
        jmb.add(helpMenu);

        //add menu items with mnemonics to menu "options"
        optionsMenu.add(jmiLogin = new JMenuItem("Login", 'L'));
        optionsMenu.addSeparator();
        optionsMenu.add(jmiBack = new JMenuItem("Back", 'B'));

        //panel p1 to holds text fields
        JPanel p1 = new JPanel(new GridLayout(2, 2));
        p1.add(new JLabel("Username"));
        p1.add(jtfUsername = new JTextField(15));
        p1.add(new JLabel("Password"));
        p1.add(jtfPassword = new JPasswordField(15));

        //panel p2 to holds buttons
        JPanel p2 = new JPanel(new FlowLayout());
        p2.add(backButton = new JButton("Back"));
        p2.add(loginButton = new JButton("Login"));

        //Panel with image??????

        //add panels to frame
        JPanel panel = new JPanel(new GridLayout(2, 1));
        panel.add(p1, BorderLayout.CENTER);
        panel.add(p2, BorderLayout.SOUTH);
        add(panel, BorderLayout.CENTER);
        setTitle("Main Page");


        //listners for exit menuitem and button
        jmiBack.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Welcome welcome = new Welcome();
                welcome.setVisible(true);
                welcome.setSize(500, 500);
                welcome.setLocationRelativeTo(null);
                registerInterface regFace = new registerInterface();
                regFace.setVisible(false);
                log.this.dispose();
                log.this.setVisible(false);
            }
        });

        backButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Welcome welcome = new Welcome();
                welcome.setVisible(true);
                welcome.setSize(500, 500);
                welcome.setLocationRelativeTo(null);
                registerInterface regFace = new registerInterface();
                regFace.setVisible(false);
                log.this.dispose();
                log.this.setVisible(false);
            }
        });

        //listner for about menuitem
        jmiAbout.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null,
                        "This is the login panel"
                        + "\n Assignment for University",
                        "About", JOptionPane.INFORMATION_MESSAGE);
            }
        });

        //action listeners for Login in button and menu item
        loginButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                MainMenu mainmenu = new MainMenu();
                mainmenu.setVisible(true);
                mainmenu.setSize(500, 500);
                mainmenu.setLocationRelativeTo(null);
                registerInterface regFace = new registerInterface();
                regFace.setVisible(false);
                log.this.dispose();
                log.this.setVisible(false);
            }
        });

        jmiLogin.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                MainMenu mainmenu = new MainMenu();
                mainmenu.setVisible(true);
                mainmenu.setSize(500, 500);
                mainmenu.setLocationRelativeTo(null);
                registerInterface regFace = new registerInterface();
                regFace.setVisible(false);
                log.this.dispose();
                log.this.setVisible(false);
            }
        });
    }
}

我已经在netbeans中设置了一个JDBC,并添加了包含用户名和密码的表,并用模拟用户名和密码填充了表,我还想让他们在单击新用户时可以将新信息添加到数据库,以便他们可以长期使用新帐户。

下面是我的 JDBC

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 

public class JDBC { 
    private Connection con = null;
    private String query = null; 
    private ResultSet rs; 
    private String url = "jdbc:derby://localhost:1527/Assignment";    
    private String usrName = "root";
    private String pwd = "root";
    
    public JDBC() throws Exception { 
        try { 
            con = DriverManager.getConnection(url, usrName, pwd); 
            query = "SELECT USERNAME, PASSWORD from root.PERSON";
            PreparedStatement stm = con.prepareStatement(query); 
            rs = stm.executeQuery(); 
            while (rs.next()) { 
                String USER = rs.getString("USERNAME"); 
                String PW = rs.getString("PASSWORD"); 
                
                System.out.println(" USERNAME: " + 
                        USER + " PASSWORD: " + PW); 
            } 
            close(); 
        } catch (Exception e) {           
        }
    }
    private void close() { 
        try { 
            if (rs != null) { 
                rs.close(); 
            } 
            if (con != null) {
                con.close(); 
            }
        } catch (Exception e) { 
        }
    }
    
    public static void main(String[] args) throws Exception { 
        JDBC dao = new JDBC();
    } 
} 

最佳答案

阅读JDBC Database Access有关 SQL 的信息教程。

编辑:

您为什么要读取所有用户 ID 和密码?对于登录检查,您将查询数据库以查看是否在数据库中找到了在用户 ID/密码文本字段中输入的值。

因此查询将类似于:

query = "select userid from person where userid = ? and password = ?";
PreparedStatement stm = con.prepareStatement(query); 
stmt.setString(1, useridTextField.getText());
stmt.setString(2, passwordTextField.getPassword().toString());

因此您的 SQL 方法需要访问文本字段中的数据。

然后,如果 ResultSet 不为空,您就知道您为给定的用户 ID 输入了正确的密码。

再次阅读教程以了解正确的 SQL。

关于java - 如何在 Gui 程序中实现 JDBC 数据库以验证登录程序的用户和密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18928921/

相关文章:

java - Apache StrTokenizer 如何转义字符串文字中的引号和逗号

java - 使用 DataSource 设置 JDBC 属性

java - JDBCPreparedStatement 忽略 $$ ... $$ 查询 block 中的 ' ? '

java - 任务候选用户的 activiti API

java - Spring Data JPA 在两个查询中加载一对一关系

java.util.Date 克隆或复制以不暴露内部引用

c# - C#中的 retrofit 和OAuth认证,为什么要再次使用Http

ios - 使用 Swift 解析登录

asp.net-mvc - 为什么在Membership.ValidateUser 中不直接调用SetAuthCookie?

hibernate - Elasticsearch 需要数据库吗?