Java+Swing: 连接数据库并完成登录验证 整理10

1. 封装连接数据库的工具类

package com.utils;import java.sql.*;/*** @Author:xiexu* @Date:2023/12/11 10:13*/
// 连接数据库的工具类
public class DBUtil {private static final String URL = "jdbc:mysql://localhost:3306/student_score?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC";private static final String DRIVER = "com.mysql.cj.jdbc.Driver";private static final String USERNAME = "root";private static final String PASSWORD = "123456";static {  // 加载一下驱动try {Class.forName(DRIVER);  // 执行com.mysql.cj.jdbc.Driver 里面的静态代码块} catch (ClassNotFoundException e) {e.printStackTrace();}}// 获取数据库连接public static Connection getConnection() throws SQLException {try {Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);return connection;} catch (SQLException e) {e.printStackTrace();}return null;}// 关闭连接public static void closeConnection(Connection connection) {if (connection != null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}public static void closePS(PreparedStatement preparedStatement) {if (preparedStatement != null) {try {preparedStatement.close();} catch (SQLException e) {e.printStackTrace();}}}public static void closeRS(ResultSet resultSet) {if (resultSet != null) {try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}}
}

详细解释: 

(1)

    static {  // 加载一下驱动try {Class.forName(DRIVER);  // 执行com.mysql.cj.jdbc.Driver 里面的静态代码块} catch (ClassNotFoundException e) {e.printStackTrace();}}

这是一个静态的代码块,当类加载的时候,在静态代码块中,通过Class.forName() 来动态加载JDBC的驱动类,便于后续的数据库连接操作

(2)

    public static Connection getConnection() throws SQLException {try {Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);return connection;} catch (SQLException e) {e.printStackTrace();}return null;}

建立数据库连接, 通过DriverManager.getConnection()方法获取参数,来建立连接

(3)

// 关闭连接public static void closeConnection(Connection connection) {if (connection != null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}// 关闭相应的资源public static void closePS(PreparedStatement preparedStatement) {if (preparedStatement != null) {try {preparedStatement.close();} catch (SQLException e) {e.printStackTrace();}}}public static void closeRS(ResultSet resultSet) {if (resultSet != null) {try {resultSet.close();} catch (SQLException e) {e.printStackTrace();}}}

通过 closeConnection() 方法关闭数据库的连接, 通过closePS()和closeRS() 关闭相关的资源

 

2. 实体类

因为是从数据库中查找数据进行校验,所以需要定义一个实体类,对应数据库中的字段

@Data
public class Admin {private Integer id;private String userName;private String pwd;
}

这里面get和set方法使用@Data注解就搞定了 

 

3. service层

从数据库中查找数据进行校验,并返回boolean类型

3.1 定义一个接口

package com.service;import com.entity.Admin;import java.sql.SQLException;/*** @Author:xiexu* @Date:2023/12/11 10:33*/
public interface AdminService {boolean validateAdmin(Admin admin) throws SQLException;
}

3.2 实现类(实现接口的方法)

package com.service.Impl;import com.entity.Admin;
import com.service.AdminService;
import com.utils.DBUtil;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;/*** @Author:xiexu* @Date:2023/12/11 10:40*/
public class AdminServiceImpl implements AdminService {@Overridepublic boolean validateAdmin(Admin admin) throws SQLException {String userName = admin.getUserName();String pwdParam = admin.getPwd();String sql = "select pwd from admin where user_name = ?";Connection connection = DBUtil.getConnection();// 空指针,返回falseif (connection ==null) {return false;}PreparedStatement preparedStatement = connection.prepareStatement(sql);preparedStatement.setString(1, userName); // 将userName参数设置到查询语句中的第一个占位符处。ResultSet resultSet = preparedStatement.executeQuery(); // 执行查询, 返回resultSet对象while (resultSet.next()) {String pwd = resultSet.getString(1);if (pwdParam.equals(pwd)) {  // 比较return true;}}DBUtil.closeRS(resultSet);DBUtil.closePS(preparedStatement);DBUtil.closeConnection(connection);return false;}
}

 

4. 登录校验

 

登录界面的详细代码请参考:http://t.csdnimg.cn/4Ia1L  和  http://t.csdnimg.cn/9Erk3

 

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

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

相关文章

tidb安装 centos7单机集群

安装 [rootlocalhost ~]# curl --proto https --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh [rootlocalhost ~]# source .bash_profile [rootlocalhost ~]# which tiup [rootlocalhost ~]# tiup playground v6.1.0 --db 2 --pd 3 --kv 3 --host 192.168.1…

智能优化算法应用:基于缎蓝园丁鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于缎蓝园丁鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于缎蓝园丁鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.缎蓝园丁鸟算法4.实验参数设定5.算法…

CRM系统的这些功能助您高效管理客户

客户管理可以理解为企业收集并利用客户信息,满足客户的需求,从而提升客户价值的过程。CRM系统一直被誉为客户管理的“神器”,下面我们就来说说CRM系统有哪些功能可以管理客户? 1、客户信息管理 CRM可以帮助企业收集客户的基本信…

专业课145+总分440+东南大学920考研专业基础综合信号与系统数字电路经验分享

个人情况简介 今年考研440,专业课145,数一140,期间一年努力辛苦付出,就不多表了,考研之路虽然艰难,付出很多,当收获的时候,都是值得,考研还是非常公平,希望大…

transformer模型结构|李宏毅机器学习21年

来源:https://www.bilibili.com/video/BV1Bb4y1L7FT?p4&vd_sourcef66cebc7ed6819c67fca9b4fa3785d39 文章目录 概述seq2seqtransformerEncoderDecoderAutoregressive(AT)self-attention与masked-self attentionmodel如何决定输出的长度…

并查集带压缩路径的find

目录 原因: 优化: 原因: 当路径比较特殊,如图: 非常深,最底层进行find时,循环找根(或者递归找),消耗就比较大。 我们可以进行优化。 优化: &…

Java设计模式分类

java的设计模式大体上分为三大类: 创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式(7种):适配器模式&am…

【算法系列篇】递归、搜索和回溯(二)

文章目录 前言1. 两两交换链表中的节点1.1 题目要求1.2 做题思路1.3 代码实现 2. Pow(X,N)2.1 题目要求2.2 做题思路2.3 代码实现 3. 计算布尔二叉树的值3.1 题目要求3.2 做题思路3.3 代码实现 4. 求根节点到叶结点数字之和4.1 题目要求4.2 做题思路4.3 代码实现 前言 前面为大…

行人重识别paper汇总

文章目录 2021Learning Generalisable Omni-Scale Representations for Person Re-Identification 参考 2021 Learning Generalisable Omni-Scale Representations for Person Re-Identification code: https://github.com/KaiyangZhou/deep-person-reid 摘要:一…

浅析以太网接口及串口转以太网技术

浅析以太网接口 以太网相关接口主要包括:MII/RMII/SMII以及GMII/RGMII/SGMII接口。 一、MII接口 MII(Media Independent Interface)介质无关接口或称为媒体独立接口,它是IEEE-802.3定义的以太网行业标准。它包括一个数据接口和…

【C++】C++异常语法、使用、规范、异常安全及异常的优缺点

1. C异常概念 异常是一种处理错误的方式,当一个函数发现自己无法处理的错误时就可以抛出异常,让函数的直接或间接的调用者处理这个错误。 throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。catch: 在您想要处理…

HarmonyOS4.0从零开始的开发教程11给您的应用添加弹窗

HarmonyOS(十)给您的应用添加弹窗 概述 在我们日常使用应用的时候,可能会进行一些敏感的操作,比如删除联系人,这时候我们给应用添加弹窗来提示用户是否需要执行该操作,如下图所示: 弹窗是一种…