1.简介
①原有方法弊端
- 数据库连接创建太多造成服务器崩溃
- 连接需要断开,如果没断开可能造成内存泄漏
内存泄漏:内存中的对象不能回收 - 不能控制连接对象数目
②数据库连接池优点
- 自身有一定数量的连接,可以使用和返还
- 注意:返回时需要set auto_commit=true(即回复默认状态)
③主流数据库连接池
2.代码
//c3p0的数据库连接技术
@Test
public void tes1() throws Exception{
//获取c3p0连接池
ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass( "com.mysql.jdbc.Driver" );
cpds.setJdbcUrl( "jdbc:mysql://localhost:3306/test?characterEncoding=utf8" );
cpds.setUser("root");
cpds.setPassword("abc123");
//初始连接池的连接数
cpds.setInitialPoolSize(10);
Connection conn = cpds.getConnection();
System.out.println(conn);
//销毁c3p0连接池
DataSources.destroy(cpds);
}
//DBCP的数据库连接技术
//不推荐应该用配置文件
@Test
public void test2() throws SQLException{
//创建了DBCP数据库连接池
BasicDataSource source = new BasicDataSource();
//设置基本信息
source.setDriverClassName("com.mysql.jdbc.Driver");
source.setUrl( "jdbc:mysql://localhost:3306/test?characterEncoding=utf8");
source.setUsername("root");
source.setPassword("abc123");
//设置数据库连接池管理的相关属性
Connection conn =source.getConnection();
System.out.println(conn);
}
//方式二:使用配置文件
@Test
public void test3() throws Exception{
Properties pros = new Properties();
FileInputStream is = new FileInputStream("src/dbcp.properties");
pros.load(is);
//创建了DBCP数据库连接池
DataSource source = BasicDataSourceFactory.createDataSource(pros);
//设置基本信息
//设置数据库连接池管理的相关属性
Connection conn =source.getConnection();
System.out.println(conn);
}
//重点:druid数据库连接池
@Test
//1.先加载驱动并buildpath
//2.写配置文件看找具体的API(配置文件四个信息)
//3.利用配置文件获取连接
public void test4() throws Exception{
Properties pros = new Properties();
FileInputStream is = new FileInputStream("src/druid.properties");
pros.load(is);
DataSource source = DruidDataSourceFactory.createDataSource(pros);
Connection conn = source.getConnection();
System.out.println(conn);
}
}