java was datasource_四种连接数据库的方法(DriverManager、DataSource子类、DBCP、c3p0)...

四种连接数据库的方法(DriverManager、DataSource子类、DBCP、c3p0)

一、环境

1、数据库驱动jar文件

2、DBCP方法

Commons-dbcp.jar:连接池的实现 Commons-pool.jar:连接池实现的依赖库 资源文件

3、c3p0方法: c3p0-0.9.1.2.jar

配置文件:c3p0-config.xml 二、连接操作 1.DriverManager方法; import java.sql.Connection;

package demo.jdbcpool.test1;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

public class DBConnection {

private static String driverClass = "com.mysql.jdbc.Driver";

private static String url = "jdbc:mysql://localhost:3306/test";

private static String username = "root";

private static String password = "123456";

private static Connection conn = null;

static {

try {

// 注册驱动

// 不要把conn = DriverManager.getConnection(url, username, password);

// 放在这里。防止所有用户都用一个Connection

Class.forName(driverClass);

} catch (Exception e) {

throw new RuntimeException(e);

}

}

public static Connection getConnection() throws SQLException {

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

return conn;

}

}

2.使用DataSource子类方法;

资源文件DBConnection.properties

driverClass = com.mysql.jdbc.Driver

url = jdbc:mysql://localhost:3306/test

username = root

password = 123456

模拟数据连接池

DataSourcePool.java

package cn.langzi.jdbc.DataSource;

import java.io.InputStream;

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;

import javax.sql.DataSource;

public class DataSourcePool implements DataSource {

private static String url = null;

private static String username = null;

private static String password = null;

private static int size = 10;

private static LinkedList list = new LinkedList();

static{

try {

InputStream in = DataSourcePool.class.getClassLoader()

.getResourceAsStream       ("cn/langzi/jdbc/DataSource/DBConnection.properties");

Properties prop = new Properties();

prop.load(in);

Class.forName(prop.getProperty("driverClass"));

url = prop.getProperty("url");

username = prop.getProperty("username");

password = prop.getProperty("password");

} catch (Exception e) {

throw new ExceptionInInitializerError(e);                  }         }

private static DataSourcePool pool = new DataSourcePool();

//创建对象就初始化size个数据库连接

private DataSourcePool(){

for(int i=0;i

try {

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

System.out.println(conn);

list.add(conn);

} catch (SQLException e) {

e.printStackTrace();

}

}

DataSource有两种实现方式

1.直连数据库方式

1.当调用DataSource.getConnection()时,其实它调用的是DriverManager.getConnection(url, user, password)来获取一个Connection,Connection使用完后被close,断开与数据库的连接,我们称这总方式是直连数据库,因为每次都需要重新建立与数据库之间的连接,而并没有把之前的Connection保留供下次使用.

2.池化连接方式

1.可以说这种方式就是使用了连接池技术.DataSource内部封装了一个连接池,当你获取DataSource的时候,它已经敲敲的与数据库建立了多个Connection,并将这些Connection放入了连接池,此时调用DataSource.getConnection()它从连接池里取一个Connection返回,Connection使用完后被close,但这个close并不是真正的与数据库断开连接,而是告诉连接池"我"已经被使用完,"你"可以把我分配给其它"人"使用了.就这样连接池里的Connection被循环利用,避免了每次获取Connection时重新去连接数据库.

对DataSource的两种实现方式已经介绍完毕,现在知道DataSource与连接池之间的是关系而不是区别了吧,因为DataSource与连接池根本就不是同一类型的东西,只有同一类型的东西才存在区别,例如:oracle与db2都是数据库,它们才存在区别.

我们这里仅仅实现了数据库的链接,并没有池化链接

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值