jdbc——工具类的创建

news/2024/4/19 21:49:28/文章来源:https://blog.csdn.net/m0_72960906/article/details/127632105


封装工具类

1 为什么要封装工具类

- 在实际JDBC中的使用中,存在着大量的重复代码:例如连接数据库、关闭数据库这些操作。
- 我们需要把传统的JDBC代码进行重构,抽取出通用的JDBC工具类。以后连接任何数据库、释放资源都可以使用这个工具类。

![](img/07工具类核心思想.png)

2 重用性方案

2.1 方案思想

(1)新建一个工具类DBUtils。

(2)在工具类DBUtils类中封装获取连接、释放资源两个方法。

- 提供public static Connection getConnection(){}方法。
- 提供public static void closeAll(Connection connection,Statement statement,ResultSet resultSet){}方法

2.2 方案代码

```
package cn.bdqn.demo03;

import java.sql.*;

/**
 * 重用性方案
 * 获取连接
 * 释放资源
 */
public class DBUtils {

    static {// 类加载,执行一次!
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    // 1.获取连接
    public static Connection getConnection() {
        Connection connection = null;
        try {
            connection = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/java2217", "root", "123456");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }

    // 2.释放资源
    public static void closeAll(Connection connection, Statement statement,
            ResultSet resultSet) {
        try {
            if (resultSet != null) {
                resultSet.close();
            }
            if (statement != null) {
                statement.close();
            }
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
```

3 跨平台方案

3.1 方案思想

(1)在项目src文件夹下创建db.properties文件,在文件中编写数据库驱动、数据库url、用户名、密码相关数据。

```
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/java2217
username=root
password=123456
```

(2)在工具类DBUtils类中读取db.properties配置文件数据。

```
定义private static final Properties PROPERTIES = new Properties();//读取配置文件的Map

定义static{

    //通过复用本类自带流,读取配置文件中的数据

    InputStream is = DBUtils.class.getResourceAsStream("配置文件路径");

    // 通过prop对象将流中的配置信息分隔成键值对

    PROPERTIES.load(is);

    //通过driverName的键获取对应的值(com.mysql.jdbc.Driver)

    String driverName=PROPERTIES.getProperty("driver");
    //注册驱动
    Class.forName(driverName);
}
```

(3)在工具类DBUtils类中封装获取连接、释放资源两个方法。

- 提供public static Connection getConnection(){}方法。
- 提供public static void closeAll(Connection connection,Statement statement,ResultSet resultSet){}方法

3.2 方案代码

```
package cn.bdqn.demo04;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class DBUtils {
    // //读取配置文件的Map
    private static final Properties PROPERTIES = new Properties();

    static {
        // 通过复用本类自带流,读取配置文件中的数据
        InputStream is = DBUtils.class.getResourceAsStream("/db.properties");

        try {
            // 通过prop对象将流中的配置信息分隔成键值对,将配置文件内容加载到properties集合
            PROPERTIES.load(is);
            // 注册驱动,通过driverName的键获取对应的值(com.mysql.jdbc.Driver)
            Class.forName(PROPERTIES.getProperty("driver"));
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    // 获取连接对象
    public static Connection getConnection() {
        Connection connection = null;
        try {
            connection = DriverManager.getConnection(
                    PROPERTIES.getProperty("url"),
                    PROPERTIES.getProperty("username"),
                    PROPERTIES.getProperty("password"));
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }

    // 释放所有资源
    public static void closeAll(Connection connection, Statement statement,
            ResultSet resultSet) {
        try {
            if (resultSet != null) {
                resultSet.close();
            }
            if (statement != null) {
                statement.close();
            }
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
```

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

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

相关文章

AWS 使用Lambda实现钉钉机器人报警

aws 支持邮件和短信的报警通知,考虑时效性问题和结合公司的使用情况,需要接入钉钉机器人的告警提醒,为了使用钉钉机器人的告警,我们利用LambdaSNS,利用Lambda接受SNS的警告信息,然后通过python发送到钉钉机…

Git快速入门

本文是我在学习过程中记录学习的点点滴滴,目的是为了学完之后巩固一下顺便也和大家分享一下,日后忘记了也可以方便快速的复习。 Git前言一、版本控制1.1、常见的版本控制工具二、版本控制分类2.1、本地版本控制2.2、集中版本控制 SVN2.3、分布式版本控制…

从0到1实现python基于RPC协议的接口自动化测试

01、什么是RPC RPC(Remote Procedure Call)远程过程调用协议是一个用于建立适当框架的协议。从本质上讲,它使一台机器上的程序能够调用另一台机器上的子程序,而不会意识到它是远程的。 RPC 是一种软件通信协议,一个程…

记一次VMOS Pro破解记录

vmos pro是在安卓上运行的安卓模拟器,自带root,免root运行Xposed,免root运行Magisk等,支持修改分辨率,支持谷歌GMS服务,后台可持续运行. 背景 意外发现这么一款好玩的虚拟机但使用起来有诸多限制&#xff…

科研快报|全长扩增子测序揭示口腔微生态变化可用作阿尔兹海默症识别指标

背景介绍 阿尔茨海默病(AD)是一种神经退行性疾病,通常影响老年人。由于老年人患牙根龋和缺牙的发病率较高,这些牙齿问题中涉及的细菌可能会恶化他们的认知功能。口腔中微生物群的改变可能通过从口腔迁移到大脑而诱发神经炎症。然…

Spring IOC 核心流程介绍

前言 接下来我们编写入口代码,跟代码梳理一下Spring IOC一些重要的方法节点。IOC有12个比较重要的方法,把这12个方法学习一下,整个Spring IOC基本就差不多了。 编写Spring IOC入口 1、创建需要被管理的类 接口类: package se…

爱尔兰药品局药品信息数据查询

爱尔兰位于欧洲西部的爱尔兰岛中南部,多年来实施低税率国家政策,吸引着全球各大巨头公司,如苹果、谷歌、脸书等巨头,其中不乏包含很多医药企业,如世界级生物医药巨头辉瑞(Pfizer)、诺华&#xf…

刷题笔记(牛客java选择题)

目录 访问权限修饰符 抽象类和接口 线性安全的集合类 线性不安全的集合类 方法重载与重写 getDeclaredMethods方法 浮点型 和 long 不能做 switch() 的参数类型 java程序运行命令 字符串的不可变性 访问权限修饰符 抽象类和接口 使用abstract修饰的类或方法,就…

MacOS安装FFmpeg

MacOS安装FFmpeg方式一、使用Homebrew安装FFmpeg1. 安装Homebrew2. 安装FFmpeg方式二、通过官网安装FFmpeg方式一、使用Homebrew安装FFmpeg 1. 安装Homebrew 如果你的Mac上没有安装Homebrew,那么就先来安装Homebrew吧!步骤如下: 打开Termi…

学习笔记-Linux 安全

Linux 安全 免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关. 漏洞利用 OS-Exploits LOL Living Off The Land 相关文章 busybox docker 受限环境下回传文件命令行上线小技巧 相关资源 GTFOBinshttps://github.com…

前端高频手写题自测,你能做出几道

实现字符串的repeat方法 输入字符串s,以及其重复的次数,输出重复的结果,例如输入abc,2,输出abcabc。 function repeat(s, n) {return (new Array(n 1)).join(s); }递归: function repeat(s, n) {return…

edge:H5抓包

1、打开edge:并输入地址:edge://inspect/#devices 2、USB连接手机,并手机和电脑使用WiFi连接同一个ssid,以使手机和电脑在同一个网络; 3、手机设置:1)打开开发人员选项 2)进入开发人员选项,并开启USB调试 3)进入开发人员选项,设置USB配置为RNDIS 4、开始抓…

【架构】架构到底是是什么

对于技术人员来说,「架构」是一个再常见不过的词了。我们会对新员工培训整个系统的架构,参加架构设计评审,学习业界开源系统(例如,MySQL、Hadoop)的架构,研究大公司的架构实现,例如,微信架构、淘宝架构……虽然「架构」这个词常见,但如果深究一下「架构」到底指什么,…

简单的Java web项目源码(10个)

引言:Java web项目主要采用mvc的的设计思想,系统主要采用javajspservletmysqleclipse实现,具有登陆、分页、导出excel,增删改查等功能,适合初学者,满足基本的实训需求,以下是推荐的几款,总有适合…

【备战蓝桥杯 | 软件Java大学B组】十三届真题深刨详解(2)

个人名片: 🐼作者简介:一名大二在校生,喜欢编程🎋 🐻‍❄️个人主页🥇:小新爱学习. 🐼个人WeChat:hmmwx53 🕊️系列专栏:&#x1f5bc…

以开发之名 | 小红书:用年轻人的方式开发年轻人喜欢的应用

2013年,小红书在上海成立,同年12月,小红书推出海外购物分享社区。一个开放式的体验型分享社区走进了数亿用户的生活。每个人都能在这个开放社区,分享自己的生活笔记,给有同样需求的人种草。 小红书用户“一只雪梨酱”的…

EPICS记录参考--数据扇出记录(dfanout)

数据散出或"dfanout"记录用于最多转发数据到8个其它记录。除了向它添加了转发数据的能力外,它类似于fanout记录。它没有相关联的设备支持。 参数字段 在下面描述记录特定的字段,按功能分组。 扫描参数 数据fanout记录有用于指定其在什么情况…

k3s 指南

k3s 指南 文章目录k3s 指南简介什么是 K3s?技术亮点架构发展趋势云边缘k3s 周边单节点高可用代理注册部署清单集群要求大型集群cpu 与 内存数据库配置选项使用安装脚本二进制配置配置文件网络选项Flannel options简介 轻量级Kubernetes k3s是经CNCF一致性认证的Kubernetes发行…

Spring底层核心概念

在深入Spring核心源码之前,需要了解一些Spring的核心概念,便于后面的进行展开。 一:BeanDefinition 表示Bean定义,BeanDefinition中存在很多属性用来描述一个Bean的特点; class,表示Bean的类型scope,表示Bean作用域…

快速排序【模板+边界处理】

全文目录:😃快速排序的思想😕 快速排序演示图😴 代码模板❗️ i 和 j 的取值和循环处理 ❗️🗽 i 和 j 的取值 🗽🗽 循环条件判断 🗽💢 边界问题 💢&#x1f…