详解Java GUI连接Derby数据库,实现注册登录功能
2021/6/18 2:03:16
本文主要是介绍详解Java GUI连接Derby数据库,实现注册登录功能,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
0x01 功能分析
- 连接Derby数据库
在Java中,要想连接Derby数据库,首先要确保Derby数据库的三个jar文件添加到系统环境变量CLASSPATH中(如果是使用集成IDE开发,则对应不同的IDE要具体配置)。
然后,使用Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
加载驱动,使用DriverManager.getConnection("jdbc:derby:【这里是数据库的路径】")
连接数据库,当然,要先创建好,否则是连接不上的。 - 实现查询数据库功能
使用SQL查询语句在Java中的封装:Connection(与数据库建立的连接)、Statement(SQL语句的抽象)、ResultSet(数据库返回的结果集)。
例如下: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); } }
0x02 代码实现
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); } } }
这篇关于详解Java GUI连接Derby数据库,实现注册登录功能的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)