Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
加载驱动,使用DriverManager.getConnection("jdbc:derby:【这里是数据库的路径】")
连接数据库,当然,要先创建好,否则是连接不上的。Connection conn = DriverManager.getConnection("jdbc:derby:test;create=true");// 连接到test数据库,如果不存在则新建一个 Statement stat = conn.createStatement("SELECT * FROM users");// SQL语句的封装 ResultSet rs = stat.executeQuery();// 返回的结果集合
public class RegisterPanel extends JPanel { RegisterPanel() { setLayout(new FlowLayout()); init(); } void init() { var idText = new JTextField(10); var pasText = new JTextField(10); var dateText = new JTextField(10); var registerButton = new JButton("注册"); add(new JLabel("ID:")); add(idText); add(new JLabel("密码:")); add(pasText); add(new JLabel("出生日期(****-**-**):")); add(dateText); add(registerButton); } }
public class LoginPanel extends JPanel { LoginPanel() { setLayout(new FlowLayout()); init(); } void init() { var idText = new JTextField(10); var pasText = new JTextField(10); var loginButton = new JButton("登录"); add(new JLabel("ID:")); add(idText); add(new JLabel("密码:")); add(pasText); add(loginButton); } }
DbBridge.java
package Login; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; /** * 处理与数据库的通讯 * * @since 10 * @author TagBug {@link https://github.com/tagbug} */ public class DbBridge { private Connection conn; private static final String registerQuery = "INSERT INTO users VALUES(?,?,?)";// 预处理 private static final String passwordQuery = "SELECT password FROM users WHERE id=?";// 预处理 /** * 默认构造方法,建立与数据库的连接 * * @throws ClassNotFoundException 加载数据库驱动失败 * @throws SQLException 建立连接失败 */ DbBridge() throws ClassNotFoundException, SQLException { Class.forName("org.apache.derby.jdbc.EmbeddedDriver");// 加载Derby数据库驱动 conn = DriverManager.getConnection("jdbc:derby:test;create=true");// 连接到test数据库,如果不存在则新建一个 } /** * 注册,将信息存入数据库 * * @param id 用户ID * @param password 用户密码 * @param birthDate 出生日期 * @return 是否成功 */ public boolean register(String id, String password, String birthDate) throws SQLException { var preStat = conn.prepareStatement(registerQuery);// 预处理SQL语句 preStat.setString(1, id); preStat.setString(2, password); preStat.setString(3, birthDate); if (preStat.executeUpdate() != 0) { return true; } return false; } /** * 登录,读取与ID对应的密码,检测给出的密码与数据库中的密码是否一致 (在实际运用中一般是将密码做Hash处理,将Hash值作比较,而非直接明文) * * @param id 用户ID * @param password 用户密码 * @return 是否成功 */ public boolean login(String id, String password) throws SQLException { var preStat = conn.prepareStatement(passwordQuery);// 预处理SQL语句 preStat.setString(1, id); try (ResultSet rs = preStat.executeQuery()) { if (rs.next()) { if (rs.getString(1).equals(password)) { return true; } } } return false; } }
LoginPanel.java
package Login; import java.awt.FlowLayout; import java.sql.SQLException; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; /** * 登录界面视图 * * @since 10 * @author TagBug {@link https://github.com/tagbug} */ public class LoginPanel extends JPanel { private DbBridge dbBridge; LoginPanel(DbBridge dbBridge) { this.dbBridge = dbBridge; setLayout(new FlowLayout()); init(); } void init() { var idText = new JTextField(10); var pasText = new JTextField(10); var loginButton = new JButton("登录"); loginButton.addActionListener(e -> { try { if (dbBridge.login(idText.getText(), pasText.getText())) { JOptionPane.showMessageDialog(this, "登录成功!", "提示", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(this, "登录失败!ID不存在或密码错误!", "错误", JOptionPane.ERROR_MESSAGE); } } catch (SQLException e1) { // 出现其他异常的处理 e1.printStackTrace(); JOptionPane.showMessageDialog(this, "注册失败:" + e1, "错误", JOptionPane.ERROR_MESSAGE); } }); add(new JLabel("ID:")); add(idText); add(new JLabel("密码:")); add(pasText); add(loginButton); } }
RegisterPanel.java
package Login; import java.awt.FlowLayout; import java.sql.SQLException; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; /** * 注册界面视图 * * @since 10 * @author TagBug {@link https://github.com/tagbug} */ public class RegisterPanel extends JPanel { private DbBridge dbBridge; RegisterPanel(DbBridge dbBridge) { this.dbBridge = dbBridge; setLayout(new FlowLayout()); init(); } void init() { var idText = new JTextField(10); var pasText = new JTextField(10); var dateText = new JTextField(10); var registerButton = new JButton("注册"); registerButton.addActionListener(e -> { try { if (dbBridge.register(idText.getText(), pasText.getText(), dateText.getText())) { JOptionPane.showMessageDialog(this, "注册成功!", "提示", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(this, "注册失败!ID不能重复!", "错误", JOptionPane.ERROR_MESSAGE); } } catch (SQLException e1) { // 出现其他异常的处理 e1.printStackTrace(); JOptionPane.showMessageDialog(this, "注册失败:" + e1, "错误", JOptionPane.ERROR_MESSAGE); } }); add(new JLabel("ID:")); add(idText); add(new JLabel("密码:")); add(pasText); add(new JLabel("出生日期(****-**-**):")); add(dateText); add(registerButton); } }
MainFrame.java
package Login; import java.awt.BorderLayout; import java.sql.SQLException; import javax.swing.JFrame; import javax.swing.JTabbedPane; /** * 主窗体 * * @since 10 * @author TagBug {@link https://github.com/tagbug} */ public class MainFrame extends JFrame { private DbBridge dbBridge; MainFrame() throws ClassNotFoundException, SQLException { dbBridge = new DbBridge(); setTitle("登录&注册"); setBounds(10, 10, 600, 140); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); init(); setVisible(true); } void init() { var tabPanel = new JTabbedPane(); var loginPanel = new LoginPanel(dbBridge); var registerPanel = new RegisterPanel(dbBridge); tabPanel.add("我要注册", registerPanel); tabPanel.add("我要登陆", loginPanel); add(tabPanel, BorderLayout.CENTER); } public static void main(String[] args) { try { new MainFrame(); } catch (ClassNotFoundException e) { System.out.println("驱动加载失败!" + e); } catch (SQLException e) { System.out.println("数据库连接失败!" + e); } } }