用Java写出利用GUI和数据库,参考【例14-数据库编程应用举例】,实现一个注册和登录程序。注册时,应向用户提示“注册成功!”或“id不能重复”;登录时,应向用户提示“登录成功”或“登录失败,重新登录”。
时间: 2023-09-24 10:02:28 浏览: 36
好的,这里是一个用Java实现的注册和登录程序,使用了Swing作为GUI界面,MySQL作为数据库。
首先,我们需要在MySQL中创建一个名为"users"的表,用来存储用户的ID、用户名和密码信息。表结构如下:
```
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(50),
password VARCHAR(50)
);
```
接下来,我们需要编写Java代码来连接数据库,创建GUI界面,并实现注册和登录功能。下面是完整的代码:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
public class RegisterLogin extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
// GUI组件
private JLabel label1 = new JLabel("ID:");
private JLabel label2 = new JLabel("用户名:");
private JLabel label3 = new JLabel("密码:");
private JTextField textField1 = new JTextField();
private JTextField textField2 = new JTextField();
private JPasswordField passwordField = new JPasswordField();
private JButton button1 = new JButton("注册");
private JButton button2 = new JButton("登录");
// 数据库连接相关
private Connection conn = null;
private Statement stmt = null;
public RegisterLogin() {
// 设置GUI界面
setTitle("注册和登录");
setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(false);
JPanel panel1 = new JPanel(new GridLayout(3, 2));
panel1.add(label1);
panel1.add(textField1);
panel1.add(label2);
panel1.add(textField2);
panel1.add(label3);
panel1.add(passwordField);
JPanel panel2 = new JPanel(new FlowLayout());
panel2.add(button1);
panel2.add(button2);
Container contentPane = getContentPane();
contentPane.add(panel1, BorderLayout.CENTER);
contentPane.add(panel2, BorderLayout.SOUTH);
// 添加事件监听器
button1.addActionListener(this);
button2.addActionListener(this);
// 连接数据库
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");
stmt = conn.createStatement();
} catch (Exception e) {
e.printStackTrace();
}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == button1) {
// 注册
String id = textField1.getText();
String username = textField2.getText();
String password = new String(passwordField.getPassword());
try {
// 检查ID是否已经存在
ResultSet rs = stmt.executeQuery("SELECT * FROM users WHERE id = " + id);
if (rs.next()) {
JOptionPane.showMessageDialog(this, "id不能重复");
} else {
// 插入新用户
stmt.executeUpdate("INSERT INTO users (id, username, password) VALUES (" + id + ", '" + username + "', '" + password + "')");
JOptionPane.showMessageDialog(this, "注册成功!");
}
} catch (Exception ex) {
ex.printStackTrace();
}
} else if (e.getSource() == button2) {
// 登录
String id = textField1.getText();
String password = new String(passwordField.getPassword());
try {
// 检查用户是否存在
ResultSet rs = stmt.executeQuery("SELECT * FROM users WHERE id = " + id + " AND password = '" + password + "'");
if (rs.next()) {
JOptionPane.showMessageDialog(this, "登录成功");
} else {
JOptionPane.showMessageDialog(this, "登录失败,重新登录");
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
public static void main(String[] args) {
RegisterLogin frame = new RegisterLogin();
frame.setVisible(true);
}
}
```
在代码中,我们首先创建了GUI界面,并将按钮添加了事件监听器。然后,在构造函数中连接了MySQL数据库,并创建了Statement对象。在事件监听器中,我们根据用户的操作来执行相应的SQL语句,实现了注册和登录功能,并使用JOptionPane类来显示提示信息。最后,我们在main方法中创建了RegisterLogin对象并显示GUI界面。
需要注意的是,在实际使用中,我们应该将连接数据库的相关信息(如数据库地址、用户名和密码)保存在配置文件中,并使用Properties类或其他相关类来读取配置信息,以提高程序的安全性和可维护性。