DBCP
- 导jar包
- 使用DBCP创建数据库连接对象
DataSource ds=BasicDataSourceFactory.createDatasource("一个存储连接信息的properties集合");- 使用DataSource,调用连接池对象的getConnection方法
dbcpconfig.properties
#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/demobase
username=root
password=roo
JDBCUtils中的代码:
到时候我们用这个类就可以很快连接数据库。
public class JDBCUtils {
private static DataSource ds;
//DatatSource 对象只会创建一个
static {
try {
//创建DBCP的数据库连接对象
//1、获取配置文件对应的输入流
InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
//2、将流中数据读入集合
Properties pro = new Properties();
pro.load(in);
ds = BasicDataSourceFactory.createDataSource(pro);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}
public static DataSource getDs(){
return ds;
}
}
Test中的代码:
public class Test {
public static void main(String[] args) throws Exception {
Connection con = JDBCUtils.getDs().getConnection();
//使用连接
PreparedStatement ps = con.prepareStatement("select * from teacher");
ResultSet rs = ps.executeQuery();
while(rs.next()){
System.out.println(rs.getString(1) + " " + rs.getString(2));
}
//关闭
rs.close();
ps.close();
//和以前不同
con.close();
}
}
C3P0
C3P0使用流程:
- 导jar包
- 使用C3P0创建对应的数据库连接对称
DataSource ds=new ComboPooledDataSource();
注意:
·虽然有配置文件,但是配置文件没有字节读取,c3p0会自动读取配置文件,此过程隐藏了;
·保存配置文件存在的路径在src中, 其实复制到bin目录下面了,真正读取是从bin目录下查找的;
·配置文件的文件名必须固定,即 c3p0-config.xml; - 具体的连接对象使用与DBCP一样
- 无需读取配置文件,自动读取。
编写的XML文件:c3p0-config.xml
<?xml version="1.0" encoding="utf-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///estore</property>
<property name="user">root</property>
<property name="password">root</property>
</default-config>
</c3p0-config>
JDBCutils代码:
public class DaoUtils {
private static DataSource source = new ComboPooledDataSource();
private DaoUtils() {
}
public static DataSource getSource(){
return source;
}
public static Connection getConn(){
try {
return source.getConnection();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
Test中的代码:
public class Test {
public static void main(String[] args) throws Exception {
Connection con = JDBCUtils.ds().getConnection();
//使用连接
PreparedStatement ps = con.prepareStatement("select * from teacher");
ResultSet rs = ps.executeQuery();
while(rs.next()){
System.out.println(rs.getString(1) + " " + rs.getString(2));
}
//关闭
rs.close();
ps.close();
//和以前不同
con.close();
}
}
总结下感悟:1.DBCP中,是需要读取文件的,而且读取的方式和工厂类读取文件很像。只不过一个用的reader一个是steram。
2.两种都有特殊获取数据库连接的方法BasicDataSourceFactory.createDataSource(pro);和new ComboPooledDataSource();
3.C3p0居然不需要读取配置文件简直就是残暴
4.dbcp是properties格式文件,c3p0是xml格式。感觉c3p0简单点。