1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > JDBC数据库连接池

JDBC数据库连接池

时间:2023-12-09 12:44:24

相关推荐

JDBC数据库连接池

数据库|mysql教程

JDBC,数据库,连接,今天,主要,讲了,三种,方法,关于,

数据库-mysql教程

网页登入窃取密码源码,ubuntu软件burg,tomcat多个实例是指,商业爬虫教程,php工程师需要什么技能,泉山区专业seo哪家公司好lzw

今天主要讲了三种方法,关于连接池的 数据库连接池( connectionpool )的工作原理 1 、基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理。我们知道, 对于共享资源,有一个很著名的设计模式:资源池( ResourcePool )。

smartquant 源码,ros调用vscode,ubuntu 346,tomcat 的lib,sqlite数据库题,php评论星星插件,前端框架大多面相单页面,有没有爬虫这个词语,count函数php,seo优化品牌推广,电商网站 magento,jcrop 截取网页,asp动态网页模板使用lzw

局域网电影源码,最便宜ubuntu主机,禁止搜狗爬虫,php pending,seo软件原理lzw

今天主要讲了三种方法,关于连接池的

数据库连接池(connection pool)的工作原理

1、基本概念及原理

由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理。我们知道,

对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。该模式正是为了解决资源的频繁分配﹑释放所造成的问题。为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。

连接池的基本工作原理

2、服务器自带的连接池

JDBC的API中没有提供连接池的方法。一些大型的WEB应用服务器如BEA的WebLogic和IBM的WebSphere等提供了连接池的机制,但是必须有其第三方的专用类方法支持连接池的用法。

编写数据库连接池:

首先编写数据库连接池需要实现java,sql.DataSource接口,DataSource接口中定义了两个重载的getConnection()方法,实现DataSource接口后,在构造函数中批量创建与数据库的连接,并把创建的连接加入到linkedList对象中,实现getConnection方法,让这个方法每次调用的时候从linkedList中取出来一个连接给用户,当用户使用完毕connection调用close方法时,Collection对象要保证将自己返回到链表中而不要把连接返还给数据库。首先我们来看如何获取数据库的连接并且存放在链表中

先我们来看如何获取数据库的连接并且存放在链表中:

package com.csdn.tool;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

import java.lang.reflect.Proxy;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.util.LinkedList;

import java.util.Properties;

import javax.sql.DataSource;

public class MyJdbcDemo implements DataSource{

private static LinkedList list = new LinkedList();

private static String driver;

private static String url;

private static String username;

private static String password;

static{

InputStream in = MyJdbcDemo.class.getClassLoader().getResourceAsStream(“db.properties”);

Properties prop= new Properties();

try {

prop.load(in);

driver=prop.getProperty(“driver”);

url=prop.getProperty(“url”);

username=prop.getProperty(“username”);

password = prop.getProperty(“password”);

//注册驱动

Class.forName(driver);

//通过DriverManager获取一批Connection集合;

for(int i=0;i<10;i++){

Connection conn=DriverManager.getConnection(url,username,password);

System.out.println(“向池中加入了”+conn);

list.add(conn);//加入集合;

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@Override

public Connection getConnection() throws SQLException {

if(list.size()>0){

final Connection conn=list.removeFirst();//mysql的一个实现

System.out.println(“用户从池中取走了:”+conn);

System.out.println(“池的大小为: “+list.size());

return (Connection) Proxy.newProxyInstance(MyJdbcDemo.class.getClassLoader(),new Class[]{Connection.class},new InvocationHandler() {

@Override

public Object invoke(Object proxy, Method method, Object[] args)

throws Throwable {

if(!method.getName().equalsIgnoreCase(“close”)){

return method.invoke(conn, args);

}

System.out.println(conn+”被还了”);

list.add(conn);

System.out.println(“池的大小为”+list.size());

return null;

}

});

}else{

throw new RuntimeException(“请稍等”);

}

}

还有dbcp方法:

DBCP是Apache软件基金组织下的开源连接池实现,使用DBCP数据源,应用程序应在系统中增加如下两个jar文件:Commons-dbcp.jar Commons-pool.jar

Tomcat的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用

先写好配置文件,解决乱码问题,在工具中都改为gbk就行了

#连接设置driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/javawebusername=rootpassword=root#initialSize=10#最大连接数量maxActive=50#maxIdle=20#minIdle=5#maxWait=60000#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;] #注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。connectionProperties=useUnicode=true;characterEncoding=gbk#指定由连接池所创建的连接的自动提交(auto-commit)状态。defaultAutoCommit=true#driver default 指定由连接池所创建的连接的只读(read-only)状态。#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)defaultReadOnly=#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLEdefaultTransactionIsolation=READ_UNCOMMITTED//编写类public class DBManager_dbcp {private static DataSource ds;static{try{ InputStream in = DBManager.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"); Properties prop = new Properties(); prop.load(in); BasicDataSourceFactory factory = new BasicDataSourceFactory(); ds=factory.createDataSource(prop);}catch(Exception e){ e.printStackTrace();}}public static Connection getConnection() throws SQLException{return ds.getConnection();}}C3p0配置文件:com.mysql.jdbc.Driverjdbc:mysql://localhost:3306/javawebrootroot510520com.mysql.jdbc.Driverjdbc:mysql://localhost:3306/javawebrootroot510520文件类:package com.csdn.tool;import java.beans.PropertyVetoException;import java.sql.Connection;import java.sql.SQLException;import com.mchange.boPooledDataSource;public class C3p0Demo1 {private static ComboPooledDataSource ds=null;static{ds = new ComboPooledDataSource();try {ds.setDriverClass("com.mysql.jdbc.Driver");ds.setJdbcUrl("jdbc:mysql://localhost:3306/javaweb");ds.setUser("root");ds.setPassword("root");ds.setInitialPoolSize(10);ds.setMaxPoolSize(40);ds.setMinPoolSize(5);} catch (PropertyVetoException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static Connection getConnection() throws SQLException{return ds.getConnection();}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。