首页 > 数据库 >数据库连接池

数据库连接池

时间:2022-10-16 23:57:34浏览次数:47  
标签:java throwables 数据库 st sql Date import 连接池

数据库连接 --- 执行完毕 --- 释放

连接 -- 释放 十分浪费系统资源

池化技术:准备一些预先的资源,过来就连接预先准备好的

 

最小连接数: 10

最大连接数:15

等待超时:100ms

 

编写连接池,实现一个接口 DataSource

开源数据源实现(拿来即用)

DBCP

C3P0

Druid:阿里巴巴

使用了这些数据库连接池之后,我们在项目开发中就不需要编写连接数据库的代码了!

DBCP

需要用到的jar包

commons-dbcp-1.4、commons-pool-1.6

C3P0

需要用到的jar包

commons-dbcp-1.4、commons-pool-1.6

结论

无论使用说明数据源,本质还是一样的,DataSource接口不会变,方法也不会变

package com.hua.lesson05.utils;

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;

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

public class JdbcUtils_DBCP {

    private static DataSource dataSource = null;
    static{

        try{
            InputStream in = JdbcUtils_DBCP.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
            Properties properties = new Properties();
            properties.load(in);

            //创建数据源  工厂模式-->创建
             dataSource = BasicDataSourceFactory.createDataSource(properties);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //获取连接
    public static Connection getConnection() throws SQLException {
         return dataSource.getConnection();//从数据源中获取连接
    }
    //释放连接资源
    public static void release(Connection conn, Statement st, ResultSet rs){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if(st!=null){
            try {
                st.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }

}
package com.hua.lesson05;

import com.hua.lesson02.utils.JdbcUtils;
import com.hua.lesson05.utils.JdbcUtils_DBCP;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;

public class TestDBCP {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement st = null;
        try {
            conn = JdbcUtils_DBCP.getConnection();

            //区别
            //使用?占位符 代替参数
            String sql = "INSERT INTO `users`(`id`,`NAME`,`PASSWORD`,`email`,`birthday`) values(?,?,?,?,?)";
            st = conn.prepareStatement(sql);//预编译SQL,先写SQL,然后不执行

            //手动给参数赋值
            st.setInt(1,6);
            st.setString(2,"lisi");
            st.setString(3,"126466");
            st.setString(4,"[email protected]");

            //注意点: sql.Date    数据库   sql.Date
            //        util.Date   Java   new Date().getTime()  获得时间戳
            st.setDate(5,new java.sql.Date(new Date().getTime()));

            //执行
            int i = st.executeUpdate();
            if(i>0){
                System.out.println("插入成功");
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            JdbcUtils_DBCP.release(conn,st,null);
        }
    }
}
package com.hua.lesson05.utils;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcUtils_C3P0 {

        private static ComboPooledDataSource dataSource = null;
        static{
            try{
                //代码版配置
//                dataSource = new ComboPooledDataSource();
//                dataSource.setDriverClass();
//                dataSource.setUser();
//                dataSource.setPassword();
//                dataSource.setJdbcUrl();
//
//                dataSource.setMaxPoolSize();
//                dataSource.setMinPoolSize();

                //创建数据源  工厂模式-->创建
                dataSource = new ComboPooledDataSource("MySQL");//配置文件写法

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        //获取连接
        public static Connection getConnection() throws SQLException {
            return dataSource.getConnection();//从数据源中获取连接
        }
        //释放连接资源
        public static void release(Connection conn, Statement st, ResultSet rs){
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if(st!=null){
                try {
                    st.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }

    }
package com.hua.lesson05;

import com.hua.lesson05.utils.JdbcUtils_C3P0;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;

public class TestC3P0 {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement st = null;
        try {
            conn = JdbcUtils_C3P0.getConnection();//原来是自己实现的,现在用别人写的实现

            //区别
            //使用?占位符 代替参数
            String sql = "INSERT INTO `users`(`id`,`NAME`,`PASSWORD`,`email`,`birthday`) values(?,?,?,?,?)";
            st = conn.prepareStatement(sql);//预编译SQL,先写SQL,然后不执行

            //手动给参数赋值
            st.setInt(1,7);
            st.setString(2,"lisi");
            st.setString(3,"126466");
            st.setString(4,"[email protected]");

            //注意点: sql.Date    数据库   sql.Date
            //        util.Date   Java   new Date().getTime()  获得时间戳
            st.setDate(5,new java.sql.Date(new Date().getTime()));

            //执行
            int i = st.executeUpdate();
            if(i>0){
                System.out.println("插入成功");
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            JdbcUtils_C3P0.release(conn,st,null);
        }
    }
}

 

标签:java,throwables,数据库,st,sql,Date,import,连接池
From: https://www.cnblogs.com/1982king/p/16797652.html

相关文章

  • 数据库设计概念
    数据库设计概念数据库设计就是根据业务系统的具体需求,结合我们所选用的DBMS,为这个业务系统构造出最优的数据存储模型建立数据库中的表结构以及表与表之间的关联关系的过......
  • 数据库设计 软件研发步骤
    数据库设计软件研发步骤需求分析:产品经理-产品原型设计:架构师,开发工程师:软件结构设计,数据库设计,接口设计,过程设计。编码:开发工程师测试:测试工程师安装部署:运维工程师......
  • day48-JDBC和连接池04
    JDBC和连接池0410.数据库连接池10.1传统连接弊端分析传统获取Connection问题分析传统的JDBC数据库连接使用DriverManager来获取,每次向数据库建立连接的时候都要将......
  • 数据库学习笔记04- redis
    5,Redis基础redis--KV数据库--内存--单线程+异步i/o(多路io复用)计算密集型应用:多进程+多进程IO密集型应用:单线程+异步IO(协程)2008年--redis--》REmote......
  • 10.数据库设计
    数据库设计一、数据库设计的三范式第一范式:是对属性的原子性,要求属性具有原子性,不可再分解。如下表结构设计createtableStudent( StuIdvarchar(20)primarykey,......
  • 达梦数据库常用命令
    文章目录​​以管理员用户登录​​​​用户管理​​​​`创建表空间、用户并授权`​​​​`查看所有用户`​​​​常用​​​​参考文章​​以管理员用户登录su用户管理创建......
  • pymysql 连接、关闭、查询数据库代码
    1defget_conn():2"""3:return:连接,游标4"""5#创建连接6conn=pymysql.connect(host="127.0.0.1",7use......
  • 数据库的基本概念与常见的数据库软件介绍
    1.数据库的基本概念1.数据库英文单词:DataBase简称:DB2.什么是数据库?用于存储和管理数据的仓库3.数据库的特点1.持久化存储数......
  • 设置28401事件后启动数据库时报错ORA-49100
    问题描述:设置28401事件后启动数据库时报错ORA-49100,如下所示:数据库:oracle11.2.0.464位系统:centos7.964位20:36:27SQL>altersystemsetevent='28401tracenameconte......
  • flask搭建平台入门教程一:配置数据库
    flask是什么?flask可以做什么这里就不说了,百度一下即可,这篇文章主要是手把手带你使用flask搭建一个简单的注册、登陆、以及用户权限管理模块。首先需要创建一个FLASK项......