Java基础合集

本文详细介绍了Java数据库连接池的概念、作用、组件和参数设置,以DBCP为例,展示了如何创建和使用连接池。同时,概述了JDBC的基础知识,包括JDBC API和高级使用功能,如批处理和事务管理。最后提到了Spring JDBC的封装以及NamedParameterJdbcTemplate的使用。
摘要由CSDN通过智能技术生成

1、数据库连接池
 (1)现象:
        多线程数据库访问中 ,随着线程结束数据库连接销毁,线程被释放。

        每个线程都需要建立数据库连接,耗时,用户响应时间很慢。

(2)数据库连接池   
    1)连接复用

       多线程共用后端物理连接,实现连接复用。

       连接池管理物理连接,每个线程租借连接,用完后归还。

    2)限流连接

      为限制并发访问连接数,数据库服务器端设置最大并发连接数,若超过最大连接数抛 too many connections exception。

      一般,在客户端Java程序中实现业务线程排队获取数据库连接限制同时获取数据库连接数,限流来保护后端数据库。

(3)概念
        java jar包,介于java应用程序和jdbc物理连接之间,负责帮Java程序管理jdbc连接。

        通过连接池暴露的接口,java程序可以获取数据库连接,使用完毕后归还给连接池。

        连接池对JDBC连接有效管理,当连接数不足时自动创建连接,空闲连接较多时自动销毁连接,

        多线程同时获取连接时提供排队等待保证应用程序有序获得连接。

       

(4)连接池组件

       commons-dbcp.jar、commons-pool.jar、commons-logging.jar

       

package com.jdbc.pool;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
 
import org.apache.commons.dbcp2.BasicDataSource;
 
public class DBPoolTest {
    private static BasicDataSource ds = null;
    private static String DB_DRIVER="com.mysql.jdbc.Driver";
    private static String DB_URL="jdbc:mysql://192.168.198.128:3306/cloud_study";
    private static String USER="root";
    private static String PASS="123456";
    
    public static void initDbPool() {
        //1、创建连接池对象
        ds=new BasicDataSource();
        ds.setDriverClassName(DB_DRIVER);
        ds.setUrl(DB_URL);
        ds.setUsername(USER);
        ds.setPassword(PASS);
    }
    
    public void DbPoolTest() {
        Connection conn=null;
        PreparedStatement ps=null;
        ResultSet rs=null;
        try {
            //2、获取连接
            conn=ds.getConnection();
            String sql="select * from user";
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
            while(rs.next()) {
                System.out.println(rs.getString("name"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                //3、释放连接, .close(): dbcp中归还连接给连接池
                if(conn!=null)
                    conn.close();
                if(ps!=null)
                    ps.close();
                if(rs!=null)
                    rs.close();
            } catch (Exception e2) {
            }
        }    
  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值