C3P0:数据库连接池技术
package cn.itcast.JDBClian_jie_chi.C3P0;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
/*
* 数据库连接池
* 概念:使用一个容器(集合)存放数据库连接的容器
* 当系统初始化之后,容器被创建,容器会申请一些对象,当用户来访问数据库时,从容器中获取连接对象
* 用户访问完成后会将对象归还给容器
好处:
节约资源
用户不用反复向操作系统申请连接比较高效
实现:
标准接口:DataSource javax.sql包下的
方法:
获取连接:getConnection();
归还连接:Connection.close().如果对象是Connection是从连接池获取的那么
调用Connection.close()方法不会在关闭连接,而是归还连接
一般对于该接口的实现是由数据库厂商来实现的
1·C3P0:数据库连接池技术
··实现步骤
导入jar包 c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar
··定义配置文件
名称: c3p0.properties 或者 c3p0-config.xml这样的话可以自动寻找到
路径:直接将文件放在src目录下即可。
··创建核心对象,数据库连接池对象 ComboPooledDataSource
··获取连接: getConnection
2·Druid:数据库连接池技术
实现步骤
导入jar包 druid-1.0.9
定义配置文件
是properties形式的
可以是任意名称,在任意目录之下手动导入
加载配置文件
获取数据库连接池:通过工厂类来获取 DruidDataSourceFactory
获取连接:getConnection
3·定义Diruid工具类
1 定义一个类JDBCUtils
2 提供静态代码块加载配置文件,初始化连接对象
3 提供方法
获取连接方法:通过数据库连接池连接
释放资源
获取连接池方法
*
* */
//c3p0演示
public class lianjiechi1 {
public static void main(String[] args) throws SQLException {
//要记着把数据库的驱动jar包也导入
//1·创建数据库连接池对象
DataSource ds = new ComboPooledDataSource ();
Connection conn=null;
try {
//2·获取连接对象
conn = ds.getConnection ();
System.out.println (conn);
} catch (SQLException e) {
e.printStackTrace ();
}finally {
conn.close ();
}
}
}
Druid:数据库连接池技术
package cn.itcast.JDBClian_jie_chi.Druid;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
public class Druid01 {
public static void main(String[] args) throws Exception {
//加载配置文件
Properties ps = new Properties ();
InputStream is = Druid01.class.getClassLoader ().getResourceAsStream ("druid.properties");
ps.load (is);
//获取连接对象
DataSource ds = DruidDataSourceFactory.createDataSource (ps);
//获取方法
Connection conn = ds.getConnection ();
System.out.println (conn);
}
}
定义Diruid工具类
package cn.itcast.JDBClian_jie_chi.Utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/*
* Druid 连接池工具类
* */
public class Utils {
//定义成员变量
private static DataSource ds;
//加载配置文件的静态代码块
static {
Properties ps = new Properties ();
InputStream is = Utils.class.getClassLoader ().getResourceAsStream ("druid.properties");
try {
ps.load (is);
//获取DataSource
ds = DruidDataSourceFactory.createDataSource (ps);
} catch (IOException e) {
e.printStackTrace ();
} catch (Exception e) {
e.printStackTrace ();
}
}
//获取连接的方法
public static Connection getConnection() throws SQLException {
return ds.getConnection ();
}
//释放资源的方法
public static void close(Statement sta,Connection conn){
if(sta!=null){
try {
sta.close ();
} catch (SQLException e) {
e.printStackTrace ();
}
}
if(conn!=null){
try {
conn.close ();
} catch (SQLException e) {
e.printStackTrace ();
}
}
}
//重载释放资源的方法
public static void close(ResultSet rs,Statement sta,Connection conn){
if(rs!=null){
try {
rs.close ();
} catch (SQLException e) {
e.printStackTrace ();
}
}
close (sta,conn);
}
//返回连接池
public static DataSource getDataSource(){
return ds;
}
}
工具类的使用
package cn.itcast.JDBClian_jie_chi.Druid;
import cn.itcast.JDBClian_jie_chi.Utils.Utils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/*
* 使用工具类
* */
public class Druid02 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
try {
//获取连接
conn = Utils.getConnection ();
//编写Sql语句、
String sql = "insert into account values(null,?,?)";
//获取数据库操作对象
ps = conn.prepareStatement (sql);
//给问号赋值
ps.setString (1,"wangwu");
ps.setInt (2,3000);
//执行语句
int count = ps.executeUpdate ();
System.out.println (count);
} catch (SQLException e) {
e.printStackTrace ();
}finally {
Utils.close (ps,conn);
}
}
}