利用Druid实现对数据库的一些基本操作

Druid数据库连接 | Spring Boot 集成 Druid实现数据库连接和完善的SQL执行监控 我们知道,应用系统最频繁,最主要的操作还是数据库的操作,所以数据库的性能和安全对于整个系统平台的重要性不言而喻。为了提高数据库性能,我们可以使用数据库连接池,有时候我们需要增加一些列的日志或是数据库性能监控工具来确保数据库的性能,同时还得防范数据库的SQL注入等安全问题。 所以,今天我们来介绍一款集数据库连接池、数据库监控、SQL执行日志于一身的神器:Druid。 一、Druid简介 Druid 是阿里巴巴开源平台上的一个数据库连接池项目,它结合了 C3P0、DBCP 等数据库池的优点,同时加入了S 阅读详情

文章目录

一、数据库表的基本信息

-- 删除tb_brand表
DROP TABLE IF EXISTS tb_brand;
-- 创建tb_brand表
CREATE TABLE tb_brand
(
    -- id 主键
    id           INT PRIMARY KEY AUTO_INCREMENT,
    -- 品牌名称
    brand_name   VARCHAR(20),
    -- 企业名称
    company_name VARCHAR(20),
    -- 排序字段
    ordered      INT,
    -- 描述信息
    description  VARCHAR(100),
    -- 状态:0:禁用  1:启用
    STATUS       INT
);
-- 添加数据
INSERT INTO tb_brand (brand_name, company_name, ordered, description, STATUS)
VALUES ('三只松鼠', '三只松鼠股份有限公司', 5, '好吃不上火', 0),
       ('华为', '华为技术有限公司', 100, '华为致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界', 1),
       ('小米', '小米科技有限公司', 50, 'are you ok', 1);

二、使用步骤

1.导入jar包

 

2.配置环境

点击添加为库

选择级别为:模块库

 

 修改配置文件:

        修改url(即修改的数据库)

        自行修改username和password

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///db01?useSSL=false&useServerPrepStmts=true
username=root
password=1234
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000

3.java代码实现

Brand类

package cn.Subject;

/**
 * @author wzk
 */
public class Brand {
    // id 主键
    int id;
    // 品牌名称
    String brand_name;
    // 企业名称
    String company_name;
    // 排序字段
    int ordered;
    // 描述信息
    String description;
    // 状态:0:禁用  1:启用
    Integer STATUS;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getBrand_name() {
        return brand_name;
    }

    public void setBrand_name(String brand_name) {
        this.brand_name = brand_name;
    }

    public String getCompany_name() {
        return company_name;
    }

    public void setCompany_name(String company_name) {
        this.company_name = company_name;
    }

    public int getOrdered() {
        return ordered;
    }

    public void setOrdered(int ordered) {
        this.ordered = ordered;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Integer getSTATUS() {
        return STATUS;
    }

    public void setSTATUS(Integer STATUS) {
        this.STATUS = STATUS;
    }

    @Override
    public String toString() {
        return "Brand{" +
                "id=" + id +
                ", brand_name='" + brand_name + '\'' +
                ", company_name='" + company_name + '\'' +
                ", ordered=" + ordered +
                ", description='" + description + '\'' +
                ", STATUS=" + STATUS +
                '}';
    }
}

实现功能

package cn.Druid;

import cn.Subject.Brand;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.junit.jupiter.api.Test;

import javax.sql.DataSource;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

/**
 * @author wzk
 */
public class Druid_BrandTest {
    /**
    *   查询所有
    *   1.sql:select * from tb_brand
    *   2.参数:无
    *   3.结果 List<Brand>
    */

    @Test
    public void testSelectAll() throws Exception {
        Properties prop=new Properties();
        prop.load(new FileInputStream("E:\\java\\JDBC\\src\\druid.properties"));

        //获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);

        //获取数据库连接 Connection
        Connection conn = dataSource.getConnection();
        String sql="select * from tb_brand";
        PreparedStatement pstat = conn.prepareStatement(sql);

        ResultSet rs = pstat.executeQuery();

        Brand brand = null;
        List<Brand> list = new ArrayList<Brand>();
        while(rs.next()){
            //获取数据
            int id = rs.getInt("id");
            String brand_name = rs.getString("brand_name");
            String company_name = rs.getString("company_name");
            int ordered = rs.getInt("ordered");
            String description = rs.getString("description");
            int status = rs.getInt("status");

            //封装对象
            brand=new Brand();
            brand.setId(id);
            brand.setBrand_name(brand_name);
            brand.setCompany_name(company_name);
            brand.setOrdered(ordered);
            brand.setDescription(description);
            brand.setSTATUS(status);

            //纳入集合中
            list.add(brand);
        }

        System.out.println(list);

        rs.close();
        pstat.close();
        conn.close();
    }

    /**
     * 添加
     * 1. SQL:insert into tb_brand(brand_name, company_name, ordered, description, status) values(?,?,?,?,?);
     * 2. 参数:需要,除了id之外的所有参数信息
     * 3. 结果:boolean
     */

    @Test
    public void testAdd() throws Exception {
        // 接收页面提交的参数
        String brandName = "香飘飘";
        String companyName = "香飘飘";
        int ordered = 1;
        String description = "绕地球一圈";
        int status = 1;


        Properties prop=new Properties();
        prop.load(new FileInputStream("E:\\java\\JDBC\\src\\druid.properties"));

        //获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);

        //获取数据库连接 Connection
        Connection conn = dataSource.getConnection();
        String sql = "insert into tb_brand(brand_name, company_name, ordered, description, status) values(?,?,?,?,?);";
        PreparedStatement pstat = conn.prepareStatement(sql);

        //4. 设置参数
        pstat.setString(1,brandName);
        pstat.setString(2,companyName);
        pstat.setInt(3,ordered);
        pstat.setString(4,description);
        pstat.setInt(5,status);

        Brand brand = null;

        //执行SQL
        int count = pstat.executeUpdate(); // 影响的行数
        //处理结果
        System.out.println(count > 0);


        //释放资源
        pstat.close();
        conn.close();
    }

    /**
     * 修改
     * 1. SQL:

     update tb_brand
     set brand_name  = ?,
     company_name= ?,
     ordered     = ?,
     description = ?,
     status      = ?
     where id = ?



     * 2. 参数:需要,所有数据
     * 3. 结果:boolean
     */

    @Test
    public void testUpdate() throws Exception {
        // 接收页面提交的参数
        String brandName = "香飘飘";
        String companyName = "香飘飘";
        int ordered = 1000;
        String description = "绕地球三圈";
        int status = 1;
        int id = 4;

        //加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("E:\\java\\JDBC\\src\\druid.properties"));

        //获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);

        //获取数据库连接 Connection
        Connection conn = dataSource.getConnection();

        //定义SQL
        String sql = " update tb_brand\n" +
                "         set brand_name  = ?,\n" +
                "         company_name= ?,\n" +
                "         ordered     = ?,\n" +
                "         description = ?,\n" +
                "         status      = ?\n" +
                "     where id = ?";

        //获取pstmt对象
        PreparedStatement pstmt = conn.prepareStatement(sql);

        //设置参数
        pstmt.setString(1,brandName);
        pstmt.setString(2,companyName);
        pstmt.setInt(3,ordered);
        pstmt.setString(4,description);
        pstmt.setInt(5,status);
        pstmt.setInt(6,id);

        //执行SQL
        int count = pstmt.executeUpdate(); // 影响的行数
        //处理结果
        System.out.println(count > 0);


        //释放资源
        pstmt.close();
        conn.close();

    }

    /**
     * 删除
     * 1. SQL:

     delete from tb_brand where id = ?

     * 2. 参数:需要,id
     * 3. 结果:boolean
     */

    @Test
    public void testDeleteById() throws Exception {
        // 接收页面提交的参数
        int id = 4;


        //1. 获取Connection
        //3. 加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("E:\\java\\JDBC\\src\\druid.properties"));
        //4. 获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);

        //5. 获取数据库连接 Connection
        Connection conn = dataSource.getConnection();

        //2. 定义SQL
        String sql = " delete from tb_brand where id = ?";

        //3. 获取pstmt对象
        PreparedStatement pstmt = conn.prepareStatement(sql);

        //4. 设置参数

        pstmt.setInt(1,id);

        //5. 执行SQL
        int count = pstmt.executeUpdate(); // 影响的行数
        //6. 处理结果
        System.out.println(count > 0);


        //7. 释放资源
        pstmt.close();
        conn.close();
    }
}

 

在Spring Boot中使用Druid数据库连接池 文章目录在Spring Boot中使用Druid数据库连接池前言引入Spring Boot Druid Starter配置Druid数据库连接池加密数据库密码日志监控参考文档 在Spring Boot中使用Druid数据库连接池 前言 在 使用IDEA开发Spring Data JPA for MySQL 一文中我们使用了Spring Data JPA来访问MySQL数据库,而在真实环境中,为了性... 阅读详情

相关推荐

数据库连接池技术与 Druid 连接工具类实现

1.1. 什么是数据库连接池数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个当数据库连接空闲时间太长,超过了规定的最长空闲时长,就把这个连接释放掉这样做是为了防止连接一直占着却没人用 ,要是不释放,就会出现连接浪费,也就是数据库连接遗漏的问题。通过这种方式,能大大提升对数据库操作的速度和效率。

艺杯羹的博客 1328

源码分析MyCat之SQL解析篇-----sql解析引擎druid之抽象语法树(mycat1.6)

1、Druid解析引擎概要 DruidSQL解析引擎主要分为三个部分,AST抽象语法树,词法解析,语法解析。 AST抽象语法树,语法解析的结果,由众多AST语法对象组成一颗树,而词法分析就是解析出一个一个关键字,作为语法解析的输入。 Druid SQL解析引擎整体介绍,推荐一篇文章:http://www.tuicool.com/articles/NNJNbmF 故本节重点认识一下...

中间件兴趣圈 1万+

数据库崩溃恢复机制:REDO日志与UNDO日志详解

在数据库管理系统中,事务的持久性和一致性是至关重要的。为了保证在系统崩溃或发生故障时数据不会丢失,数据库引入了恢复机制。其中,REDO日志和UNDO日志是两种关键的恢复技术。本文将详细描述这两种日志的作用、工作原理以及它们在数据库崩溃恢复中的应用。

My_wife_QBL的博客 1413

Druid连接池连接数据库

1. Mysql数据库创建 新建一个info数据库 create database info; 新建student表 Create table student( id int primary key auto_increment, name varchar(32) nut null, age int nut null, course varchar(32) nut null ); 插入数据 insert into student(name, age,

c_plug的博客 271

从零到一:Mx_yolo本地训练与K210部署实战指南

本文详细介绍了从零开始进行Mx_yolo本地模型训练到K210部署的全流程实战指南。涵盖环境配置、数据准备、模型训练与调优、模型转换及K210部署等关键步骤,并提供了常见问题解决方案和性能优化技巧,帮助开发者高效完成AI模型在嵌入式设备的落地应用。

weixin_29081163的博客 252

MAX31856高精度热电偶测温系统实战:从寄存器配置到温度读取

本文详细介绍了MAX31856高精度热电偶测温系统的实战应用。从硬件连接避坑、核心寄存器配置(如CR0、CR1),到利用中断高效读取并解析温度数据,提供了完整的驱动框架和代码示例。该方案解决了传统热电偶信号微弱、非线性及冷端补偿难题,适用于工业测温等场景,帮助开发者快速实现稳定可靠的高精度温度测量。

coffee的博客 486

数据库批量插入这么讲究的么?

最近新的项目写了不少各种 insertBatch 的代码,一直有人说,批量插入比循环插入效率高很多,那本文就来实验一下,到底是不是真的? 测试环境: SpringBoot 2.5 Mysql 8 JDK 8 Docker 首先,多条数据的插入,可选的方案: foreach循环插入 拼接sql,一次执行 使用批处理功能插入 搭建测试环境` sql文件: drop database IF EXISTS test; CREATE DATABASE test; use test; DROP TABLE IF

秦怀杂货店 1461

点到面点云配准(Point To Plane)算法知识详解和详细推导,C++代码实现

点到面 ICP (Iterative Closest Point) 是在 3D 点云配准中常见的一种变体,通过最小化点到对应面(由法向量定义的局部平面)的距离来提高收敛速度和精度。

qq_36812406的博客 1811

Druid基础知识(编辑中)

Druid https://yuzhouwan.com/posts/5845/ http://druidio.cn/ 实时,快速,切片,大数据(PB级),列式存储,分布式 结合了OLAP分析数据库、时间序列数据库和全文检索思想 集成kafka等消息队列和hdfs等文件系统 数据源可以使Hadoop、spark、storm和kafka等 使用mvcc解决并发问题 Druid 聚合 会将数据进行预聚合...

LaZY的博客 344

反爬虫:POST 请求参数中 Sign 的加密机制详解,并设计带 Sign 校验的网站

本文介绍了API请求中sign签名的生成原理及实现方法。sign是通过对请求参数加密生成的一串字符串,用于验证请求合法性,防止参数篡改、重放攻击和伪造请求。其生成步骤包括参数排序、拼接字符串、加盐和哈希加密。文章还演示了如何在FastAPI后端实现带sign验证的新闻网站,包括参数校验、时间戳验证和签名比对等安全措施,有效提升API安全性,增加爬虫逆向难度。

数据知道的博客 4079

运维系列【仅供参考】:RustDesk部署疑难解答

RustDesk部署疑难解答

weixin_54626591的博客 283

mysql连接池DataSource,DruidDataSource的理解及其使用

简单理解为数据源头,提供了应用程序所需要数据的位置。数据源保证了应用程序与目标数据之间交互的规范和协议,它可以是数据库,文件系统等等。其中数据源定义了位置信息,用户验证信息和交互时所需的一些特性的配置,同时它封装了如何建立与数据源的连接,向外暴露获取连接的接口。应用程序连接数据库无需关注其底层是如何如何建立的,也就是说应用业务逻辑与连接数据库操作是松耦合的。以下只讨论当数据源为数据库的情况,且为Java环境下JDBC规范下的如何建立与数据库的连接,其他情况类似。...

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 1万+

ArcGIS JSAPI 高级教程 - 添加多个 box 立方体 - 通过顶点、索引、UV 自定义每个 box、每个面不同颜色

ArcGIS JSAPI 高级教程 - 添加多个 box 立方体 - 通过顶点、索引、UV 自定义每个 box、每个面不同颜色。

非科班Java出身GISer的博客 403

【JavaSE】JDBC封装(JDBC+Druid+Template)

查询语句 package com.hzyc; import java.sql.*; public class queryTset { public static void main(String[] args) { Connection conn = null; Statement stmt = null; ResultSet reSet = null; String url = "jdbc:mysql://localhost:3

界王拳十倍 307

荣耀Magic 6 dToF LiDAR Android阵营全球第一首发

40X30分辨率的BSI SPAD小面阵,帧率达到60帧,搭配多传感器融合算法, 可产生足够的稠密点云,为应用设备提供可靠的距离传感。在手机消费电子方案中,dToF LiDAR技术不仅提升了手机的功能和用户体验,还为手机厂商提供了差异化的竞争优势。随着技术的不断进步和市场的快速发展,我们可以期待未来dToF LiDAR技术将在手机领域发挥更大的作用,为用户带来更多创新和便捷的功能。增强现实(AR)体验:通过dToF LiDAR提供的高精度深度信息,手机可以更准确地放置虚拟物体在现实世界的表面上。

致力于lidar应用开发 19万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

DRUID连接池的实用 配置详解

DRUID介绍 DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池(据说是目前最好的连接池,不知道速度有没有BoneCP快)。 配置参数 和其它连接池一样DRUID的DataSource类为:com.alibaba.drui...

zhangjinwei417的博客 5万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Druid(德鲁伊)数据库连接池

​ 一、什么是Druid? 1.1 概念 Druid是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、Proxool等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池,可以说是目前最好的连接池之一。 1.2 Druid的优点 ①结合了C3P0、DBCP、Proxool等DB池的优点; ②速度快,且稳定性好; ③可以很好的监控DB池连接和SQL的执行情况。 二、如何连接Druid数据库连接池? 2.1 导入jar包 将j

qq_62443736的博客 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

利用Druid实现应用,SQL监控和防SQL注入

一、关于Druid Druid是一个JDBC组件,它包括三部分: DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。 DruidDataSource 高效可管理的数据库连接池。 SQLParser Druid可以做什么? 1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的St

IT爱好者 1万+

Druid连接池实现数据库加密

对于如今的开发参项目,无论是公司的项目还是个人的项目,多多少少都会选择将源码上传到 Git 服务器(GitHub、Gitee 或是自建服务器),但只要将源码提交到公网服务器就会存在源码泄漏的风险,而数据库配置信息作为源码的一部分,一旦出现源码泄漏,那么数据库中的所有数据都会公之于众,其产生的不良后果无法预期。于是为了避免这种问题的产生,我们至少要对数据库的密码进行加密操作,这样即使得到了源码,也不会造成数据的泄露。

Young_深情不及里子的博客 4842

Druid实现数据库连接用户密码加密

地址URL:Druid官网https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter 实例地址URL:http://my.oschina.net/ydsakyclguozi/blog/511997 使用ConfigFilter ConfigFilter的作用包括:     从配置文件中读取配置   

无怨无悔专栏 2万+

DRUID连接池的使用

               DRUID——为监控而生的DB池 DRUID介绍     DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池(据说是目前最好的连接池,不知道速度有没有BoneCP快)。   ...

iteye_12732的博客 4348

阿里数据库连接池 druid 配置详解

1.1Druid概念: Druid(德鲁伊)是阿里巴巴开发的号称为监控而生的数据库连接池,Druid是目前最好的数据库连接池。在功能、性能、扩展性方面,都超过其他数据库连接池,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。Druid地址:https://github.com/alibaba...

huangyh技术栈 2935

Druid 数据库连接池 详解

1.数据库连接池是个容器,负责分配、管理数据库连接(Connection); 2.它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个; 3.释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏;优点 1.资源重用 2.提升系统响应速度 3.避免数据库连接遗漏连接池是在一开始就创建好了一些连接(Connection)对象存储起来。用户需要连接数据库时,不需要自己创建连接,而只需要从连接池中获取一个连接进行使用,使用完毕后再将连接对象归还...

斯文~ 1万+

Druid数据库连接池

简介 DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池,据说是目前最好的连接池。 使用 1.添加依赖 <dependency> <groupId>com.alibaba</groupId...

zehuawong的博客 370

【JAVA - Druid】Druid数据库连接池 -- 快速入门使用

1. 导入相关的 jar 包 * mysql-connector-java.jar包(此包用于idea连接数据库用) * Druid.jar(对数据库进行操作(增删查改,用的是mysql) * 其他包用于数据操作使用 2. 进行相关的数据库配置 ,编写.xml文件 (放在java工程src目录下) // 告诉java去com.mysql.jdbc路径下将...

乐嘉工作室 4076

利用druid进行JDBC的连接

druid是与C3P0类似的数据库连接池,用起来也会比我之前博客写到的基本的数据库连接方法简单的多,代码量也大大的减少,利用JdbcTemplate将极大的方便了我们的代码编写; 具体的案例如下: public class JDBCUtils { private static DataSource ds; static { try { Pr...

weixin_44121079的博客 2477
上一篇: 反射的一些基本操作
下一篇: maven 打包项目成war报错
486过于烦躁
博客等级 码龄6年 17粉丝 34原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值