首页 > 数据库 >2022-08-20 数据库连接池

2022-08-20 数据库连接池

时间:2022-08-22 22:45:31浏览次数:79  
标签:20 name 08 id 2022 null public 连接池 pstmt

数据库连接池

每次去初始化一个连接池,连接池中会有很多个连接等待被使用,使用完连接之后,不需要关闭连接,只需要把连接还回到连接池,还回到连接池的操作不需要我们手动控制。

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。

Why?我们为什么要使用它呢?

数据库连接是一种关键的有限的昂贵的资源,一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的性能低下。每次去初始化一个连接池,连接池中会有很多个连接等待被使用。使用完连接之后,不需要关闭连接,只需要把连接还回到连接池,还回到连接池的操作不需要我们手动控制。初始化连接池,10条连接,来了20个请求,10个请求就直接拿10条连接去办事。剩下的10个请求,再向服务器申请连接数。 连接池技术尽可能多地重用了消耗内存地资源,大大节省了内存,提高了服务器地服务效率,能够支持更多的客户服务。通过使用连接池,将大大提高程序运行效率。

常见的数据库连接池

  • (1)C3P0,2代数据库连接池,太老了
  • (2)DBCP,2代数据库连接池,太老了
  • (3)Druid(德鲁伊)数据库连接池,最好用的连接池。

阿里巴巴开源平台上的一个数据库连接池实现,整合了C3P0和DBCP各自的优点,加入了日志监控,可以监控sql语句的执行情况。

  • (4)Hikari(光),目前最快的连接池。springboot默认的连接池。
    必须有对应的属性文件:.properties。约定 > 配置 > 编码

JDBC使用数据库连接的必要性:在使用基于web程序的数据库连接

1、在主程序中建立连接
2、执行SQL
3、断开连接

案例1

点击查看代码,TeacherDao类
package com.jsoft.morning.demo1;

import com.jsoft.util.BaseDao;

import javax.xml.transform.Result;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class TeacherDao extends BaseDao {

    public int saveTeacher(Teacher teacher) {

        Connection conn = null;
        PreparedStatement pstmt = null;
        String sql = "insert into teacher (name) values (?)";

        try {
            conn = DATA_SOURCE.getConnection();
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, teacher.getName());

            return pstmt.executeUpdate();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            release(pstmt, null);
        }

    }

    public int updateTeacher(Teacher teacher) {
        Connection conn = null;
        PreparedStatement pstmt = null;
        String sql = "update teacher set name = ? where id = ?";

        try {
            conn = DATA_SOURCE.getConnection();
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, teacher.getName());
            pstmt.setInt(2, teacher.getId());

            return pstmt.executeUpdate();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            release(pstmt, null);
        }
    }

    public int deleteTeacher(Integer id) {
        Connection conn = null;
        PreparedStatement pstmt = null;
        String sql = "delete from teacher where id = ?";

        try {
            conn = DATA_SOURCE.getConnection();
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, id);

            return pstmt.executeUpdate();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            release(pstmt, null);
        }
    }

    public List<Teacher> findAllTeacher() {

        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        String sql = "select id,name from teacher";

        List<Teacher> teachers = new ArrayList<>(16);

        try {
            conn = DATA_SOURCE.getConnection();
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();

            while(rs.next()) {
                Teacher teacher = new Teacher(rs.getInt(1),rs.getString(2));
                teachers.add(teacher);
            }
            return teachers;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 查询某一个老师
     */
    public Teacher findOneTeacher(Integer id) {

        return null;
    }

    /**
     * 查询某一列的数据:结果是一行一列
     */
    public String findTeacherName(Integer id) {

        return null;
    }
}
点击查看代码 Teacher类
package com.jsoft.morning.demo1;

public class Teacher {

    private Integer id;
    private String name;

    public Teacher() {
    }

    public Teacher(Integer id, String name) {
        this.id = id;
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

点击查看代码 Demo
package com.jsoft.morning.demo1;

import org.junit.Test;

public class Demo {

    @Test
    public void test01() {

        TeacherDao teacherDao = new TeacherDao();
        System.out.println(teacherDao.findAllTeacher());

    }
}

标签:20,name,08,id,2022,null,public,连接池,pstmt
From: https://www.cnblogs.com/YQuicksilver/p/16614416.html

相关文章

  • Ubuntu20下载安装Docker
    安装Docker卸载旧版本sudoapt-getremovedocker\docker-engine\docker.io使用apt安装sudoapt-getupdatesudoapt-geti......
  • 2022第六届河南省高等学校信息安全对抗大赛(ISCC2022)——一时语塞
    2.一时语塞(图片好像经过了某些处理)  看到事一张图片,先用kali中的binwalk命令查看图片信息,结果发现有压缩包   然后用kali中得foremost-T将其分离出来 ......
  • 【2022-08-22】python前端开发(一)
    python前端开发(一)前端简介前端与后端前端与用户直接交互的操作界面都可以称之为是前端后端不直接与用户交互,内部真正执行核心业务逻辑的......
  • 2022-08-22 第六小组 张宁杰 HTML&CSS回顾
    知识点什么是HTMLHTML是用来描述网页的一种语言。HTML叫做超文本标记语言(HyperTextMarkerUpLanguage)HTML不是编程语言,而是一种标记语言,标记语言就是一套标记标签,HTM......
  • 2022-08-19 PreparedStatement
    PreparedStatementPreparedStatement接口是Statement的子接口,它表示一条预编译过的SQL语句什么是SQL注入SQL注入是利用某些系统没有对用户输入的数据进行充分的检查,而......
  • P1850 [NOIP2016 提高组] 换教室 思路简记
    我们令\(f_{i,j,0/1}\)表示前\(i\)个时间点,共申请了\(j\)次,第\(i\)个时间点是否(\(1/0\))进行了申请,\(g_{i,j}\)表示\(i\toj\)的最短路,\(p_i\)表示原题中的......
  • 2022-08-22 第二小组 张鑫 学习笔记
    实训四十四天HTML复习学习内容HTML基本框架head:头,标签处。包含了所有的头部信息元素title:适配搜索引擎metacharset=utf-8定义了浏览器工具栏的标题,当网页被收藏......
  • 【SQLServer】SQL server 2016如何修改网络包的大小
    SQLserver2016中,可以使用图形界面或者T-SQL来修改网络包大小的设置。缺省是4KB的大小。通常官方不建议修改默认值。支持的最小值是512bytes,最大值是32KB。此外,对于加密......
  • 2022-08-22 第八组 卢睿 学习心得
    目录数据库连接池jdbc使用数据库连接池的必要性池化思想比较常见的数据库连接池德鲁伊数据库连接池配置文件hikari数据库连接池配置文件获取连接DBUtils数据库连接池conn......
  • 0822_浅学html
    1.超级链接普通的链接:<ahref="http://www.baidu.com"target="_self">百度一下</a><br>图像链接:<ahref="http://www.baidu.com"><imgwidth="150"src="img/libai.jpe......