java实验:数据库应用(idea+mysql+php)

设计用户注册和登录界面,实现用户注册和登录操作。

  1. 设计用户注册/登录界面;
  2. 使用工具在MySQL中创建user表,包括学号、姓名、密码、专业、班级;
  3. 实现注册操作:在user表中插入一条新纪录,但学号不能重复;
  4. 实现登录操作:使用输入的学号和密码在user表中查找,查找成功,弹出消息框显示“登录成功”,不成功,则回到输入界面;使用对象文件记住在本机登录的用户名,显示在用户名组合框中。

一、首先去官网下载mysql。

这两个建议一起下,接着是配置环境,可以搜一下配置教程。

启动如上图所示的mysql和apache服务。

点击创建数据库。

根据提示填写,我这里的数据库名称是student,用户名ly,密码123456,最后点击确认。

接着转到mysql,

找到连接,点击mysql,会有一下窗户:

就依次按刚创建的数据库填写连接名,用户名,密码,其他不用改动,点击确定。

、打开创建好的连接,新建表

点击保存。

继续保存,ctrl+s。

、代码部分

代码是在idea中编写,首先要下载驱动文件mysql-connector-j-8.2.0.jar,mysql-connector-java下载_在下是小白的博客-CSDN博客

下载之后,把mysql-connector-j-8.2.0.jar复制到项目中

点击project structure,进入找到modules,点加号选第一个。

找到刚刚导入的mysql-connector-j-8.2.0.jar,双击点ok就可以了。

然后新建类粘贴一下代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;public class UserRegistrationLogin extends JFrame {private JTextField studentIdField;private JPasswordField passwordField;private JTextField nameField;private JTextField majorField;private JTextField classField;private JComboBox<String> usernameComboBox;private Connection conn;public UserRegistrationLogin() {super("User Registration and Login");this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setSize(400, 300);this.setLocationRelativeTo(null);JPanel panel = new JPanel(new GridLayout(6, 2));JLabel studentIdLabel = new JLabel("Student ID:");studentIdField = new JTextField();JLabel passwordLabel = new JLabel("Password:");passwordField = new JPasswordField();JLabel nameLabel = new JLabel("Name:");nameField = new JTextField();JLabel majorLabel = new JLabel("Major:");majorField = new JTextField();JLabel classLabel = new JLabel("Class:");classField = new JTextField();JLabel usernameLabel = new JLabel("Username:");usernameComboBox = new JComboBox<>();JButton registerButton = new JButton("Register");JButton loginButton = new JButton("Login");panel.add(studentIdLabel);panel.add(studentIdField);panel.add(passwordLabel);panel.add(passwordField);panel.add(nameLabel);panel.add(nameField);panel.add(majorLabel);panel.add(majorField);panel.add(classLabel);panel.add(classField);panel.add(usernameLabel);panel.add(usernameComboBox);panel.add(registerButton);panel.add(loginButton);this.getContentPane().add(panel);registerButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {registerUser();}});loginButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {loginUser();}});try {String driver = "com.mysql.cj.jdbc.Driver";String url = "jdbc:mysql://localhost/student?user=ly&password=123456";Class.forName(driver);conn = DriverManager.getConnection(url);loadUsernames();} catch (ClassNotFoundException | SQLException ex) {ex.printStackTrace();}}private void registerUser() {String studentId = studentIdField.getText();String password = new String(passwordField.getPassword());String name = nameField.getText();String major = majorField.getText();String className = classField.getText();if (studentId.isEmpty() || password.isEmpty() || name.isEmpty() || major.isEmpty() || className.isEmpty()) {JOptionPane.showMessageDialog(this, "Please fill in all fields");return;}try {PreparedStatement stmt = conn.prepareStatement("INSERT INTO student (student_id, name, password, major, class) VALUES (?, ?, ?, ?, ?)");stmt.setString(1, studentId);stmt.setString(2, name);stmt.setString(3, password);stmt.setString(4, major);stmt.setString(5, className);stmt.executeUpdate();JOptionPane.showMessageDialog(this, "Registration successful");studentIdField.setText("");passwordField.setText("");nameField.setText("");majorField.setText("");classField.setText("");loadUsernames();} catch (SQLException ex) {JOptionPane.showMessageDialog(this, "Registration failed: " + ex.getMessage());}}private void loginUser() {String studentId = studentIdField.getText();String password = new String(passwordField.getPassword());try {PreparedStatement stmt = conn.prepareStatement("SELECT * FROM student WHERE student_id = ? AND password = ?");stmt.setString(1, studentId);stmt.setString(2, password);ResultSet rs = stmt.executeQuery();if (rs.next()) {String name = rs.getString("name");JOptionPane.showMessageDialog(this, "Login successful. Welcome, " + name + "!");// Remember the username for future loginsString selectedUsername = (String) usernameComboBox.getSelectedItem();if (selectedUsername == null || !selectedUsername.equals(name)) {usernameComboBox.addItem(name);usernameComboBox.setSelectedItem(name);}studentIdField.setText("");passwordField.setText("");} else {JOptionPane.showMessageDialog(this, "Login failed. Please check your student ID and password.");}} catch (SQLException ex) {JOptionPane.showMessageDialog(this, "Login failed: " + ex.getMessage());}}private void loadUsernames() {try {Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT DISTINCT name FROM student");usernameComboBox.removeAllItems();while (rs.next()) {String name = rs.getString("name");usernameComboBox.addItem(name);}} catch (SQLException ex) {ex.printStackTrace();}}public static void main(String[] args) {SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {UserRegistrationLogin frame = new UserRegistrationLogin();frame.setVisible(true);}});}
}

效果展示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/239440.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

边缘数据中心和5G的融合彻底改变数据传输和物联网

伴随着数字化时代的飞速发展&#xff0c;边缘数据中心和5G技术的联袂崛起&#xff0c;正深刻塑造着人们对数据的创造、传输和处理方式。据Gartner公司的预测&#xff0c;到2025年&#xff0c;企业数据的三分之二将在边缘计算设施中涌现&#xff0c;而非传统的集中式数据中心。这…

如何在 Ubuntu 22.04中安装 Docker Compose

1 安装 pip # 下载get-pip.py脚本 wget https://bootstrap.pypa.io/pip/3.10/get-pip.py 或者 # 下载最新版本 curl https://bootstrap.pypa.io/get-pip.py --output get-pip.py# 为 Python 3 安装 pip sudo python3 get-pip.py2 安装 Pip 后&#xff0c;运行以下命令安装 Doc…

JavaScript 数据结构

JavaScript 数据结构 目录 JavaScript 数据结构 一、标识符 二、关键字 三、常量 四、变量 每一种计算机编程语言都有自己的数据结构&#xff0c;JavaScript脚本语言的数据结构包括&#xff1a;标识符、常量、变量、保留字等。 一、标识符 标识符&#xff0c;说白了&…

macos pycharm调试airflow代码

项目目录&#xff1a;本案例基于pycharm项目虚拟环境 1.进入项目虚拟环境目录 yololibogon bin % pwd /Users/yololi/PycharmProjects/pythonProjecttest/venv/bin 2.安装airflow ./python3.8 -m pip install apache-airflow2.2.5 -i https://pypi.tuna.tsinghua.edu.cn/sim…

Vmware安装Centos7

CentOs7镜像文件下载 centos7 镜像文件下载-CSDN博客 配置虚拟机 打开Vmware&#xff0c;点击新建虚拟机 典型安装与自定义安装 典型安装&#xff1a;VMware会将主流的配置应用在虚拟机的操作系统上&#xff0c;对于新手来很友好。 自定义安装&#xff1a;自定义安装可以针…

柱状展示当中 ,如何给每个位置加多个项的办法

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>双柱修改</title> <script src"https://cdn.staticfile.org/Chart.js/3.9.1/chart.js"></script> </head> <body><canvas i…

Linux部署elasticsearch集群

文章目录 一、集群规划二、安装前准备(所有节点操作)创建数据目录修改系统配置文件/etc/sysctl.conf创建用户组设置limits.conf 三、初始化配置(在节点1上操作)下载安装包解压安装包修改jvm.options文件下配置的所占内存修改集群配置文件elasticsearch.yml将安装包传到另外两个…

「Verilog学习笔记」整数倍数据位宽转换8to16

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 根据时序图&#xff0c;数据是在第二个数据到来之后输出&#xff0c;当仅有一个数据到来时&#xff0c;不产生输出&#xff0c;所以内部需要一个指示信号valid_cnt&#xf…

ZooKeeper 如何保证数据一致性?

在分布式场景中&#xff0c;ZooKeeper 的应用非常广泛&#xff0c;比如数据发布和订阅、命名服务、配置中心、注册中心、分布式锁等。 ZooKeeper 提供了一个类似于 Linux 文件系统的数据模型&#xff0c;和基于 Watcher 机制的分布式事件通知&#xff0c;这些特性都依赖 ZooKee…

vector是如何扩容的

vector容器扩容 vector是成倍扩容的&#xff0c;一般是2倍。 vector管理内存的成员函数 开始填值 没有填值之前&#xff0c;vector元素个数和容量大小都为0 加入一个值之后&#xff1a; 加入两个值&#xff1a;重点在加入三个值&#xff0c;此时容量变为4&#xff1a;加入第…

Go语言实现深度学习的正向传播和反向传播

文章目录 开发前言开发理论图解理论数据类型数学函数数据节点统一抽象变量数据节点常量数据节点单目运算封装双目运算封装算子节点统一抽象基础算子加法算子减法算子乘法算子除法算子指数算子对数算子正切算子正弦算子余弦算子数据流图正向传播反向传播运行示例开发总结 开发前…

mac安装elasticsearch

下载地址&#xff1a; Past Releases of Elastic Stack Software | Elastic https://www.elastic.co/cn/downloads/past-releases#elasticsearch 选择7.10版本 进入es bin目录下执行启动命令 ./elasticsearch 会报错 ./elasticsearch-env: line 126: syntax error near u…