我的编程空间,编程开发者的网络收藏夹
学习永远不晚

c3po简单了解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

c3po简单了解

package com.hanchao.test;

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.DataSources;



public class TestPool {
	
	public static void main(String[] args) {
		

		
		final String DRIVER = "com.mysql.jdbc.Driver";
		//final String URL = "jdbc:mysql://127.0.0.1:3306/mydb";
		//final String URL = "jdbc:mysql://localhost:3306/mydb";
		final String URL = "jdbc:mysql:///mydb";
		final String NAME = "root";
		final String PASSWORD = "root";
		
		Connection conn = null;
		Statement stat = null;
		ResultSet rs = null;
		
		try {
			//1.加载数据库驱动
			Class.forName(DRIVER);
			//连接mysql数据库
			DataSource unpooled = DataSources.unpooledDataSource(URL,NAME,PASSWORD);
			//构建一个连接池
			DataSource pooled = DataSources.pooledDataSource(unpooled);

			//2.获取数据库连接(first Time)
		    conn = pooled.getConnection();
			System.out.println("1 con Class Type is :" + conn.getClass().getName());
			//取得内部的实际数据库连接
			Object o1 = getInner(conn);
			System.out.println("1 Inner con Class Type is :" + o1.getClass().getName());
			
			//3.获取Statement对象
			stat = conn.createStatement();
			//4.执行SQL
			rs = stat.executeQuery(" select * from t_user where id = 13");
		    while (rs.next()) {
				System.out.println(" username:" + rs.getString("username"));
			}
		    
		    //5.关闭连接
		    rs.close();
		    stat.close();
		    conn.close();
		    
		    //6.等待连接返回池中
		    try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		    
		    //第二次获取数据库连接
		    conn = pooled.getConnection();
			System.out.println("2 con Class Type is :" + conn.getClass().getName());
			Object o2 = getInner(conn);
			System.out.println("2 Inner con Class Type is :" + o2.getClass().getName());
			
			//获取Statement对象
			stat = conn.createStatement();
			
			//3.获取Statement对象
			stat = conn.createStatement();
			//4.执行SQL
			rs = stat.executeQuery(" select * from t_user where id = 13");
		    while (rs.next()) {
				System.out.println(" username:" + rs.getString("username"));
			}
	
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (stat != null) {
					stat.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				try {
					if (conn != null) {
						conn.close();
					}
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}

	private static Object getInner(Object conn) {
		Object object = null;
		Field f ;
		
		try {
			f = conn.getClass().getDeclaredField("inner");
			f.setAccessible(true);
			object = f.get(conn);
			f.setAccessible(false);
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return object;
	}

}

结果:

c3po简单了解

c3po简单了解

首先,从数据库连接池获得一个连接。发现连接类型并不是mysql的数据库连接,而是,com.mchange.v2.c3p0.impl.NewProxyConnection。通过类名,可以推测,从数据库连接池中获取的只是一个代理。

当我们关闭.NewProxyConnection连接时,并没有真正关闭连接,而只是将数据库连接放入连接池保存,使得数据库连接在连接池中得到复用。而从连接池返回的NewProxyConnection对象,只是对真实数据库连接的包装。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

c3po简单了解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

简单了解MySQL存储引擎

1. MySql体系结构 在介绍存储引擎之前先来介绍下MySql的体系结构,以便大家知道存储引擎在MySql整个体系中处于什么位置。下图是官方提供的一张架构图:MySQL体系结构图 从上图可以发现,MySQL由以下几部分组成:连接池组件管理
2022-05-15

如何简单了解pythonp-入门

这篇文章给大家介绍如何简单了解pythonp-入门,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。简单了解pythonPython语言特色1. Python是一门解释性语言解释性语言:在系统中运行时需要使用解释器(如:p
2023-06-02

简单了解Spring Framework5.0新特性

SpringFramework5.0是自2013年12月版本4发布之后SpringFramework的第一个主发行版。SpringFramework项目的领导人JuergenHoeller于2016年7月28日宣布了第一个SpringFra
2023-05-30

简单了解OpenCV是个什么东西

OpenCV于1999年由Intel建立,如今由Willow Garage提供支持。OpenCV是一个基于BSD许可[1] (开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——
2022-06-04

简单了解mysql InnoDB MyISAM相关区别

前言 mysql支持很多表类型的表(即存储引擎),如myisam、innodb、memory、archive、example等。每种存储引擎都有自己的优点和缺点,充分的理解每种存储引擎,有助于合理的使用它们。有人认为在同一个数据库中使用多种
2022-05-15

简单了解Python中的几种函数

几个特殊的函数(待补充)python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数: filter、map、reduce、lambda、yield lambda>>> g = lambda x,y:x+y #x+y
2022-06-04

简单了解MYSQL数据库优化阶段

引言大家在面试的时候,是否遭遇过,面试官询问 你们是如何进行数据库优化的 那这个问题应该怎么答呢?其实写这个题材的原因是我这几天看到各公众号转的一篇数据库调优的知识(不上链接了),我就稍微翻了几下,上面动不动就来说要对数据库进行水平拆分,我
2022-05-11

简单了解Linux性能监控命令free

在系统遇到各种IO瓶颈,内存使用率高,cpu使用率高等问题时,我们如何来定位错误?linux提供了很多命令来协助我们快速定位到错误,free命令是Linux最常用的命令之一:它可以查看系统的内存状况,包括服务器的总内存,已经使用的内存和剩下
2022-06-04

简单了解JavaBean作用及常用操作

JavaBean是一种特殊的Java类,它具有以下特点:1. 封装性:JavaBean通过将属性设置为私有的,然后提供公共的getter和setter方法,来控制属性的访问和修改。2. 可序列化:JavaBean实现了Serializabl
2023-08-15

简单了解Java垃圾回收器的种类

在这篇教程中我们将学习几种现有的垃圾回收器。在Java中,垃圾回收是一个自动的进程可以替代程序员进行内存的分配与回收这些复杂的工作。这篇是垃圾回 收教程系列的第三篇,在前面的第2部分我们看到了在Java中垃圾回收是如何工作的,那是篇有意思的
2023-05-30

编程热搜

目录