基于Java Swing+NetBeans+MySQL的登录后用户信息展示问题
看起来你已经把基础的UI和实体类都搞定了,接下来咱们把核心的数据库验证和页面跳转逻辑补上就行,我给你梳理下关键步骤和代码示例:
1. 先写个数据库连接工具类
为了避免重复写连接代码,咱们封装一个工具类,方便后续调用:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBUtil { private static final String URL = "jdbc:mysql://localhost:3306/你的数据库名?useSSL=false&serverTimezone=UTC"; private static final String USER = "你的数据库用户名"; private static final String PASSWORD = "你的数据库密码"; static { try { // 加载MySQL驱动 Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, USER, PASSWORD); } public static void closeConnection(Connection conn) { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
2. 登录页面的验证逻辑
在登录窗口的登录按钮的ActionListener里,实现账号密码的验证逻辑,验证通过后获取用户信息并跳转到个人信息页面:
// 假设登录页面的账号输入框是txtUsername,密码框是txtPassword,登录按钮是btnLogin btnLogin.addActionListener(e -> { String username = txtUsername.getText().trim(); String password = new String(txtPassword.getPassword()).trim(); if (username.isEmpty() || password.isEmpty()) { JOptionPane.showMessageDialog(null, "账号或密码不能为空!", "提示", JOptionPane.WARNING_MESSAGE); return; } Connection conn = null; try { conn = DBUtil.getConnection(); // 编写查询语句,验证账号密码并获取用户信息 String sql = "SELECT name, address, email FROM users WHERE username = ? AND password = ?"; try (var pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, username); pstmt.setString(2, password); var rs = pstmt.executeQuery(); if (rs.next()) { // 封装用户实体 User user = new User(); user.setName(rs.getString("name")); user.setAddress(rs.getString("address")); user.setEmail(rs.getString("email")); // 可以把username也存进去,方便后续使用 user.setUsername(username); // 关闭当前登录窗口 dispose(); // 打开个人信息窗口,并传入用户实体 new UserInfoFrame(user).setVisible(true); } else { JOptionPane.showMessageDialog(null, "账号或密码错误!", "提示", JOptionPane.ERROR_MESSAGE); } } } catch (SQLException ex) { ex.printStackTrace(); JOptionPane.showMessageDialog(null, "数据库连接异常!", "错误", JOptionPane.ERROR_MESSAGE); } finally { DBUtil.closeConnection(conn); } });
3. 个人信息页面接收并展示数据
修改个人信息窗口的构造方法,接收User实体,然后把信息展示到对应的组件上(比如JLabel或者JTextField):
public class UserInfoFrame extends javax.swing.JFrame { public UserInfoFrame(User user) { initComponents(); // 这是NetBeans自动生成的初始化方法 // 把用户信息设置到UI组件上,假设你有这些组件:lblName, lblAddress, lblEmail lblName.setText("姓名:" + user.getName()); lblAddress.setText("地址:" + user.getAddress()); lblEmail.setText("邮箱:" + user.getEmail()); // 也可以设置窗口标题显示用户名 setTitle("个人信息 - " + user.getUsername()); } // 其他自动生成的代码... }
一些注意事项
- 记得把MySQL的驱动包(mysql-connector-java)添加到项目的类路径里,NetBeans里可以右键项目 -> 属性 -> 库 -> 添加JAR/Folder
- 密码不要明文存储在数据库里,实际开发中要加密(比如用MD5或者BCrypt),这里为了简化用了明文,你后续可以优化
- 数据库操作尽量放在子线程里,避免UI卡顿,不过小应用的话主线程也能凑合用,要是想更专业可以用
SwingWorker
内容的提问来源于stack exchange,提问作者Mint.K
相关产品推荐
相关产品推荐

