Java连接数据库实现用户登录和注册功能

目录

需求内容如下

示例代码

数据库studb

Java代码

效果图


需求内容如下

1,创建数据库studb
2,库中添加用户表userinfo,包含如下字段
    用户id ,用户名,用户密码,用户权限 (数据类型和约束自己定义)
    添加最少3条用户数据
3,java项目中实现如下功能
    (1)定义方法实现菜单选择:1,用户登录 2,用户注册
    (2)定义方法实现用户登录
        用户输入的账号密码,通过数据库表userinfo查询,如果一致,登录成功,欢迎用户XX
            如果不一致,登录失败(账号密码错误),请重新登录(3次),
            超过3次退出系统
    (3)用户注册
        输入用户名,自动检查数据库表中有无该名称存在
            如果用户名存在,提示:该用户名已经被注册,请重新输入
            如果不存在,继续输入密码,确认密码(两次密码一致),
                如果一致,将用户名和密码添加到数据表中,提示用户注册成功!

示例代码

数据库studb

drop database if exists studb;
create database studb;
alter database studb character set utf8 collate utf8_bin;
use studb;
CREATE TABLE userinfo (id INT PRIMARY KEY AUTO_INCREMENT, --   用户idusername VARCHAR(50) UNIQUE NOT NULL,--   用户名password VARCHAR(50) NOT NULL,--   用户密码permission INT NOT NULL--   用户权限
);
-- 添加数据
INSERT INTO userinfo (username, password, permission) VALUES 
('111', 'l111', 1),
('222', 'l222', 2),
('333', 'l333', 3);
-- 查询数据 
SELECT * FROM userinfo;

Java代码

import java.sql.*;
import java.util.*;public class Main {@SuppressWarnings("unused")private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";  //MYSQL6.0以下版本的得使用该驱动文件:com.mysql.jdbc.Driverprivate static final String DB_URL = "jdbc:mysql://localhost:3306/studb";//studb为数据库名private static final String USER = "root";  //换成自己的用户名private static final String PASS = "123456"; //换成自己的密码private static final Scanner scanner = new Scanner(System.in);public static void main(String[] args) {int choice = -1;while (choice != 0) {System.out.println("请选择:");System.out.println("1. 用户登录");System.out.println("2. 用户注册");System.out.println("0. 退出系统");choice = getNextInt();switch (choice) {case 1:userLogin();break;case 2:userRegister();break;case 0:System.out.println("谢谢使用,再见!");break;default:System.out.println("选择错误,请重新选择。");}}}public static void userLogin() {String username, password;int count = 0;while (count < 3) {System.out.println("请输入用户名:");username = scanner.next();System.out.println("请输入密码:");password = scanner.next();if (validateUser(username, password)) {System.out.println("欢迎用户" + username + "!");return;} else {System.out.println("账号密码错误,请重新输入。" + "还剩" + (2 - count) + "次机会");}count++;}System.out.println("错误次数过多,系统锁定,请联系管理员解锁。");System.exit(0);}public static void userRegister() {String username, password, confirmPassword;System.out.print("请输入用户名:");username = getnext();if (checkUsernameExist(username)) {System.out.println("该用户名已经被注册,请重新选择。");return;}do {System.out.print("请输入密码:");password = getnext();System.out.print("请确认密码:");confirmPassword = getnext();if (!password.equals(confirmPassword)) {System.out.println("两次密码不一致,请重新输入。");} else {break;}} while (true);if (registerUser(username, password)) {System.out.println("用户注册成功!");} else {System.out.println("用户注册失败,请稍后再试。");}}private static String getnext() {if (scanner.hasNext()) {return scanner.next();} else {throw new NoSuchElementException("未找到行");}}private static boolean validateUser(String username, String password) {try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);PreparedStatement stmt = conn.prepareStatement("SELECT * FROM userinfo WHERE username = ? AND password = ?")) {stmt.setString(1, username);stmt.setString(2, password);try (ResultSet rs = stmt.executeQuery()) {return rs.next();}} catch (SQLException e) {e.printStackTrace();}return false;}private static boolean checkUsernameExist(String username) {try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);PreparedStatement stmt = conn.prepareStatement("SELECT * FROM userinfo WHERE username = ?")) {stmt.setString(1, username);try (ResultSet rs = stmt.executeQuery()) {return rs.next();}} catch (SQLException e) {e.printStackTrace();}return false;}private static boolean registerUser(String username, String password) {try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);PreparedStatement stmt = conn.prepareStatement("INSERT INTO userinfo (username, password, permission) VALUES (?, ?, ?)")) {stmt.setString(1, username);stmt.setString(2, password);stmt.setInt(3, 1);int rows = stmt.executeUpdate();return rows > 0;} catch (SQLException e) {e.printStackTrace();}return false;}private static int getNextInt() {if (scanner.hasNextInt()) {return scanner.nextInt();} else {throw new InputMismatchException("无效的输入");}}
}

效果图

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

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

相关文章

web微服务规划

一、背景 通过微服务来搭建web系统&#xff0c;就要对微服务进行规划&#xff0c;包括服务的划分&#xff0c;每个服务和数据库的命名规则&#xff0c;服务用到的端口等。 二、微服务划分 1、根据业务进行拆分 如&#xff1a; 一个购物系统可以将微服务拆分为基础中心、会员…

SpringMVC异常处理机制

2.1 异常描述 在J2EE项目的开发中&#xff0c;不管是对底层的数据库操作过程&#xff0c;还是业务层的处理过程&#xff0c;还是控制层的处理过程&#xff0c;都不可避免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常&#xff0c;系统的代码耦合度高&a…

【C++入门到精通】 线程库 | thread类 C++11 [ C++入门 ]

阅读导航 引言一、thread类的简单介绍二、线程函数详细介绍1. start() 函数&#xff08;1&#xff09;头文件&#xff08;2&#xff09;函数原型 2. join() 函数&#xff08;1&#xff09;头文件&#xff08;2&#xff09;函数原型 3. detach() 函数&#xff08;1&#xff09;头…

LeetCode Hot100 25.K个一组翻转链表

题目&#xff1a; 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 你不能只是单纯…

7+m6A+分型+实验,甲基化方向的生信思路,没有思路的同学可参考

今天给同学们分享一篇生信文章“Landscape analysis of m6A modification regulators related biological functions and immune characteristics in myasthenia gravis”&#xff0c;这篇文章发表在J Transl Med期刊上&#xff0c;影响因子为7.4。 结果解读&#xff1a; MG相…

快速文件搜索软件 Everything-voidtools

Everything 文件搜索软件 "Everything"是一款快速、轻巧且高效的桌面搜索引擎软件&#xff0c;专门用于在 Windows 操作系统上搜索文件和文件夹。它的主要特点是超快的搜索速度和精准的搜索结果&#xff0c;能够让用户快速找到他们需要的文件或文件夹。 1. 快速搜…

IDEA小技巧

目录 1. IDEA自动添加注释 创建类的时候自动添加注释 创建函数、方法的注释 1. IDEA自动添加注释 参考文档&#xff1a;idea java 自动添加文件注释 idea新建类自动注释_mob6454cc73c728的技术博客_51CTO博客 【操作工具】IDEA创建类及已有类添加注释-详细操作_idea设置创建…

搭建个人智能家居 开篇(搭建Home Assistant)

搭建个人智能家居 开篇&#xff08;搭建Home Assistant&#xff09; 前言Home Assistant搭建Home AssistantUbuntu系统搭建Windows系统搭建VM安装方法VirtualBox安装方法&#xff1a; 配置Home Assistant控制页面 前言 随着科技的进步、发展&#xff0c;物联网给我们的生活带来…

JdbcTemplate query系列方法指定jdbcType类型

使用SqlParameterValue类包装一下就行了&#xff0c;只要创建一个SqlParameterValue对象&#xff0c;通过构造函数把jdbcType类型&#xff08;用的是Types中的常量&#xff09;和值传入 例如&#xff1a; // 这两个包下面的 import org.springframework.jdbc.core.SqlParamete…

c YUV 转 JPEG(准备霍夫曼编码)

先取yuv 文件中一个168的块&#xff0c;跑通全流程 理解与思路&#xff1a; 1.块分割 YUV 文件分为&#xff1a;YUV444 YUV 422 YUV420。444:就是&#xff1a;12个char 有4个Y&#xff0c;4个U&#xff0c;4个 U&#xff0c;422&#xff1a;8个char 中有4个Y &#x…

Redis——01,服务器购买、安装Redis

服务器购买、安装Redis 一、随便去一个主流的国内主流的云服务提供商&#xff0c;购买一个服务器。二、Redis安装&#xff1a;————————创作不易&#xff0c;如觉不错&#xff0c;随手点赞&#xff0c;关注&#xff0c;收藏(*&#xffe3;︶&#xffe3;)&#xff0c;谢…

[论文阅读]Multimodal Virtual Point 3D Detection

Multimodal Virtual Point 3D Detection 多模态虚拟点3D检测 论文网址&#xff1a;MVP 论文代码&#xff1a;MVP 论文简读 方法MVP方法的核心思想是将RGB图像中的2D检测结果转换为虚拟的3D点&#xff0c;并将这些虚拟点与原始的Lidar点云合并。具体步骤如下&#xff1a; (1)…

VINS-MONO代码解读6----pose_graph

开始pose_graph部分&#xff0c;本部分记住一句话无论是快速重定位还是正常重定位&#xff0c;求出 T w 1 w 2 T_{w_1w_2} Tw1​w2​​就是终极目标。 还剩一个整体Pipeline~~ 1. pose_graph_node.cpp 注意&#xff0c;定义全局变量时即实例化了一个对象 PoseGraph posegra…

C++之模板

目录 泛型编程 模板 函数模板 函数模板的实例化 隐式实例化 显示实例化 类模板 我们知道STL&#xff08;标准模板库&#xff09;是C学习的精华所在&#xff0c;在学习STL之前我们得先学习一个新的知识点-------模板。那么模板究竟是什么呢&#xff1f;围绕着这个问题&a…

绘图示例---QT手动调用绘图事件,按钮控制图片

效果&#xff1a; 点击 “移动” 图片向右移动20&#xff0c;点击 “西理win嘛” 图片每秒向右移动20 QQ录屏20231212164128 下面时代码详解&#xff1a; 注意使用UI和代码实现按钮的不同 UI: ui->pushButton->setGeometry(windowWidth-105, windowHeight-25, 100, 20);…

【思考】只有实对称矩阵才能正交对角化吗?【矩阵的合同】

1&#xff1a;命题改写&#xff08;A可以正交对角化&#xff09; 2&#xff1a;左乘Q右乘Q逆&#xff08;Q转置&#xff09; 3&#xff1a;取转置 4&#xff1a;得证 总结 可以看到&#xff0c;矩阵如果可以正交对角化&#xff0c;那么一定是实对称矩阵。 另外&#xff0c;这…

【期末复习向】长江后浪推前浪之ChatGPT概述

参考文章&#xff1a;GPT系列模型技术路径演进-CSDN博客 这篇文章讲了之前称霸NLP领域的预训练模型bert&#xff0c;它是基于预训练理念&#xff0c;采用完形填空和下一句预测任务2个预训练任务完成特征的提取。当时很多的特定领域的NLP任务&#xff08;如情感分类&#xff0c…

LLM之Agent(六)| 使用AutoGen、LangChian、RAG以及函数调用构建超级对话系统

本文我们将尝试AutoGen集成函数调用功能。函数调用最早出现在Open AI API中&#xff0c;它允许用户调用外部API来增强系统的整体功能和效率。例如&#xff0c;在对话过程中根据需要调用天气API。 函数调用和Agent有各种组合&#xff0c;在这里我们将通过函数调用调用RAG检索增强…

【SpringBoot】配置文件

配置文件官网 1. 配置方式 application.propertiesapplication.yml / application.yaml 2. 自定义配置信息 将实体类中的本应该写死的信息写在属性配置文件中。 可以使用 Value("${键名}") 获取&#xff0c;也可以使用 ConfigurationProperties(prefix"前…

访谈型软文写作方式,媒介盒子告诉你

访谈型软文一般用于维护企业形象&#xff0c;分享品牌故事。但是许多企业在写访谈型软文时经常容易跑偏或者写来写去没有逻辑&#xff0c;今天媒介盒子就来和大家分享访谈型软文的写作方式&#xff0c;看完这四点&#xff0c;小白也能写好访谈型软文&#xff01; 一、 访谈对象…