JDBC连接池

1.把对所有Dao类的操作——抽取一个父类

抽取:公共的属性、获取连接对象、增删改操作

把Dao类中的所有公共内容抽取到一个父类

package com.zmq.dao;

import com.alibaba.druid.pool.DruidDataSourceFactory;

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

/**
 * @program: JDBC02
 * @description:
 * @author: 赵梦倩
 * @create: 2024-04-29 08:52
 **/
public class BaseDao {
    protected Connection con=null;
    protected PreparedStatement ps=null;
    protected ResultSet rs=null;
    private String driverName="com.mysql.cj.jdbc.Driver";
    private String url="jdbc:mysql://localhost:3306/zmq";
    private String name="root";
    private String password="123456";

    //连接方法
    public void getCon() throws Exception {
        //加载驱动
        Class.forName(driverName);
        //获取连接对象
        con=DriverManager.getConnection(url,user,password);
    }
    //关闭所有资源
    public void closeAll(){
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
        if (con != null) {
            try {
                con.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
    }
    //增删改
    public int edit(String sql,Object... obj){
        int row=0;
        try {
            getCon();
            ps=con.prepareStatement(sql);
            //为占位符赋值
            for(int i=0;i< obj.length;i++){
                ps.setObject(i+1,obj[i]);
            }
             row = ps.executeUpdate();
            return row;
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            closeAll();
        }
        return 0;
    }
}

2.把数据源信息放入属性文件中

数据源:即连接池,以key=value的形式存储固定常量,便于客户根据需求修改连接数据库的相关数据

创建一个属性文件x x x. properties

必须放在src目录下

# 里面的内容格式:key=value
driverName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/zmq
username=root
password=123456

父类中相关属性变为静态的

 private static String driverName="";
 private static String driverName="";
 private static String url="";
 private static String user="";
 private static String password="";

在抽取的父类中读取属性文件中的内容——使用静态代码块

 //静态代码块: 随着类的加载而被加载,而且只会加载一次。
    static{
        try {
            //读取属性文件封装了一个类Properties
            Properties properties=new Properties();
            //加载属性文件
//            InputStream is=BaseDao.class.getResourceAsStream("db.properties");
            InputStream is=BaseDao.class.getClassLoader().getResourceAsStream("db.properties");
            properties.load(is);
            //读取相应key的值
            driverName=properties.getProperty("driverName");
            url=properties.getProperty("url");
            name=properties.getProperty("username");
            password=properties.getProperty("password");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

3. 引用数据源——连接池

连接池:该池子中存储的是连接对象。预先存放一些连接对象,当想获取连接对象时,只需要从连接池中获取,使用完毕后归还到池子中。

种类:druid(阿里巴巴的德鲁伊)

C3P0:这是一个开放源代码的JDBC连接池,与Hibernate一起发布,支持jdbc3和jdbc2扩展规范。
DBCP(Database Connection Pool):依赖于Jakarta Commons Pool对象池机制的数据库连接池,可以直接在应用程序中使用。
Proxool:提供了一个Java SQL Driver驱动程序,可以透明地为现存的JDBC驱动程序增加连接池功能。
BoneCP:一个快速、开源的数据库连接池,旨在帮助用户管理数据连接,使应用程序能更快速地访问数据库。
Druid:是一个高效、功能全面的数据库连接池,广泛应用于大数据和互联网车辆应用中。
DDConnectionBroker、DBPool、XAPool、Primrose、SmartPool、MiniConnectionPoolManager:这些连接池各有特色,如DDConnectionBroker简单轻量级,DBPool高效易配置,XAPool为XA数据库连接池,Primrose支持动态池管理,SmartPool解决连接泄漏问题,MiniConnectionPoolManager轻量级且无需依赖第三方包。

步骤:

  • 引入bruid的jar包到lib目录下
  • 放入工程,将jar包添加库——解压
  • 属性文件.properties——key的名称不能改变
#里面的内容格式key=value
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/qy174
username=root
password=root
#最大的活跃数
maxActive=10
#初始的大小
initialSize=5
#最大的等待时间
maxWait=5000

# key的名称必须是如上
  • 使用

    • 定义属性,数据源静态私有,其他保护

      public:公共,该工程下任何位置都可以访问到

      protected:本包以及不同包下的子类可以访问到

      default:本包下的类可以访问到

      private:只允许本类访问

  • 静态代码块

    • 创建属性文件对象
    • 创建输入流读取属性文件
    • 读取属性文件
    • 创建连接池对象,默认读取名称key的值
  • 获取连接对象的方法

    • 从连接池中获取连接对象
  • 关闭所有的资源

  • 增删改公共方法

    • 调用获取连接对象方法
    • 预编译执行sql语句
    • 通过普通for循环为占位符赋值
    • 返回值
public class BaseDao {
    //public: 公共 该工程下任何位置都可以访问到    protected:本包以及不同包下的子类访问到    默认:本包下的类访问到     private:本类访问
    protected Connection conn = null;
    protected PreparedStatement ps = null;
    protected ResultSet rs = null;
    private static  DataSource dataSource;
    static {
        try {
            Properties properties = new Properties();
            InputStream is = BaseDao.class.getClassLoader().getResourceAsStream("db.properties");
            properties.load(is);
            //创建连接池对象---默认读取名称DriverClassName url  username password的值
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //获取连接对象的方法
    public void getConn() throws Exception {
        //从连接池中获取连接对象
        conn = dataSource.getConnection();
    }
    //关闭所有的资源
    public void closeAll() {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }

    //增删改公共方法
    public int edit(String sql, Object... params) {
        int row = 0;
        try {
            getConn();
            ps = conn.prepareStatement(sql);
            //为占位符赋值。
            for (int i = 0; i < params.length; i++) {
                ps.setObject(i + 1, params[i]);
            }
            row = ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            closeAll();
        }
        return row;
    }
}

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

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

相关文章

设计模式Python版 备忘录模式

文章目录 前言一、备忘录模式二、备忘录模式示例1三、备忘录模式示例2 前言 GOF设计模式分三大类&#xff1a; 创建型模式&#xff1a;关注对象的创建过程&#xff0c;包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&#xff1a…

Linux红帽:RHCSA认证知识讲解(三)Linux基础指令与Vim编辑器的使用

Linux红帽&#xff1a;RHCSA认证知识讲解&#xff08;三&#xff09;Linux基础指令与Vim编辑器的使用 前言一、Linux基础指令二、Linux 文件系统层次结构概念三、通过路径指定文件四、使用命令行工具管理文件五、Vim 的安装方式六、Vim 的操作模式七、红帽建议掌握的 Vim 键和命…

auto.js例子之WebView多页面浏览器

"ui";ui.layout(<vertical><horizontal id"webs" layout_weight"1"></horizontal><button id"one" text"第一个" /><button id"two" text"第二个" /><button id"…

跨平台公式兼容性大模型提示词模板(飞书 + CSDN + Microsoft Word)

飞书云文档 CSDN MD编辑器 Microsoft Word 跨平台公式兼容方案&#xff1a; 一、背景痛点与解决方案 在技术文档创作中&#xff0c;数学公式的跨平台渲染一直存在三大痛点&#xff1a; 飞书云文档&#xff1a;原生KaTeX渲染与导出功能存在语法限制微软Word&#xff1a;Math…

HTTP 动态报错码的原因和解决方法

目录 1xx&#xff08;信息性状态码&#xff09; 2xx&#xff08;成功状态码&#xff09; 3xx&#xff08;重定向状态码&#xff09; 4xx&#xff08;客户端错误状态码&#xff09; 5xx&#xff08;服务器错误状态码&#xff09; 参考文章 以下是 HTTP 动态报错码的常见原…

Docker基础-常见命令

docker images -查看所有的本地镜像。 docker pull -把远端镜像拉取到本地。 docker rmi -删除镜像。 docker push -推到镜像仓库。 docker run -创建并运行容器&#xff08;自动化&#xff0c;如果发现镜像不存在会先去拉取&#xff0c; 拉取完了以后再去自动创建容器&am…

Spring MVC框架六:Ajax技术

精心整理了最新的面试资料&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 简介 jQuery.ajax Ajax原理 结语 创作不易&#xff0c;希望能对大家给予帮助 想要获取更多资源? 点击链接获取

36. Spring Boot 2.1.3.RELEASE 中实现监控信息可视化并添加邮件报警功能

1. 创建 Spring Boot Admin Server 项目 1.1 添加依赖 在 pom.xml 中添加 Spring Boot Admin Server 和邮件相关依赖&#xff1a; <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-w…

PowerShell 执行策略:fnm管理软件安装nodejs无法运行npm,错误信息:about_Execution_Policies

通过fnm管理软件安装NodeJS后添加环境变量依然无法执行npm,提示无法加载文件&#xff0c;错误如下&#xff1a; PowerShell 执行策略简介&#xff1a; PowerShell 执行策略是一项安全功能&#xff0c;用于控制 PowerShell 加载配置文件和运行脚本的条件。 此功能有助于防止恶…

Java在云计算平台中的应用研究

Java在云计算平台中的应用研究 随着云计算的广泛应用&#xff0c;越来越多的企业和开发者开始选择基于云计算的架构来构建和部署应用。Java作为一种成熟的编程语言&#xff0c;凭借其跨平台性、强大的生态系统以及优秀的并发处理能力&#xff0c;已成为云计算平台中常用的编程…

电脑键盘知识

1、键盘四大功能区 1. 功能区 2. 主要信息输入区 3. 编辑区 4. 数字键盘区 笔记本电脑键盘的功能区&#xff0c;使用前需先按Fn键 1.1、功能区 ESC&#xff1a;退出 F1&#xff1a;显示帮助信息 F2&#xff1a;重命名 F4&#xff1a;重复上一步操作 F5&#xff1a;刷新网页 …

论文阅读笔记:Continual Forgetting for Pre-trained Vision Models

论文阅读笔记&#xff1a;Continual Forgetting for Pre-trained Vision Models 1 背景2 创新点3 方法4 模块4.1 问题设置4.2 LoRA4.3 概述4.4 GS-LoRA4.5 损失函数 5 效果6 结论 1 背景 出于隐私和安全考虑&#xff0c;如今从预先训练的视觉模型中删除不需要的信息的需求越来…

C# 从基础神经元到实现在0~9数字识别

训练图片:mnist160 测试结果:1000次训练学习率为0.1时,准确率在60%以上 学习的图片越多&#xff0c;训练的时候越长(比如把 epochs*10 10000或更高时)效果越好 using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Windo…

蓝桥杯 5.字符串

蓝桥杯 5.字符串 文章目录 蓝桥杯 5.字符串KMP&字符串哈希Manacher编程138-148字典树基础01Trie编程149-155 KMP&字符串哈希 KMP算法 字符串匹配算法, 用于匹配**模式串P(短)和文本串S(长)**中出现的所有位置, 例如, S “ababac”, P “aba”, 那么出现的所有位置就…

AI智能体与大语言模型:重塑SaaS系统的未来航向

在数字化转型的浪潮中&#xff0c;软件即服务&#xff08;SaaS&#xff09;系统一直是企业提升效率、优化业务流程的重要工具。随着AI智能体和大语言模型&#xff08;LLMs&#xff09;的迅速发展&#xff0c;SaaS系统正迎来前所未有的变革契机。本文将从AI智能体和大语言模型对…

Jmeter聚合报告导出log文档,Jmeter聚合报告导出到CSV

Jmeter聚合报告导出log文档 在Filename中输入 EKS_perf_log\\${type}_log\\${__P(UNIQUEID,${__time(YMDHMS)})}\all-graph-results-log.csv 可以得到执行的log&#xff0c;文件夹包含时间戳 Jmeter聚合报告导出到CSV 点击Save Table Data&#xff0c;保存到CSV文件中

基于SpringBoot的“古城景区管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“古城景区管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统整体功能图 系统首页界面 系统注册界面 景…

第五项修炼:打造学习型组织

“没有哪个教室比得上一个充满问题的团队。” — 彼得圣吉 最近有伙伴问我们&#xff0c;如何在组织中践行《第五项修炼&#xff1a;打造学习型组织》&#xff1f;我想和大家分享的是&#xff0c;这不仅仅是“学习”&#xff0c;更是通过结构和行为的深度结合&#xff0c;推动绩…

ubuntu22.04的docker容器中安装ssh服务

ubuntu22.04的docker容器中安装ssh服务&#xff0c;以便外部可以连接到容器中操作。 rootnode15:~# cat /etc/issue Ubuntu 22.04.5 LTS \n \l rootnode15:~# docker ps|grep qwen 7d3c36c37d36 vllm/vllm-openai:v0.7.3 "python3 -m …

LabVIEW 中 codeGenEngine.llb 工具库

codeGenEngine.llb 是 LabVIEW 2019 安装目录下C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform\路径下的工具库&#xff0c;主要用于代码生成相关的操作&#xff0c;帮助开发者在 LabVIEW 项目中便捷地实现自动化代码生成任务&#xff0c;提高开发…