java数据源,数据库连接池,javaweb数据库连接池
传统方式和连接池方式
以传统方式进行
在Java中使用JDBC以传统方式连接数据库,要一次完成对数据库的操作,一般有以下步骤:
1.加载驱动程序。
2.建立联系。
3.执行SQL语句。
4.释放连接。
5.传统方法的缺点。
对数据库的每一个操作都需要建立一个连接,连接对象会被加载到内存中,会消耗大量的内存和时间。如果有很多操作需要在短时间内建立连接,会占用大量系统资源,甚至导致服务器崩溃。
与连接建立相对应的是,每次使用时都需要手动释放连接。如果你忘记释放连接或者程序由于异常而无法成功释放连接,就会导致内存泄漏。
另外,传统方式无法控制连接数。如果连接太多,会导致无限创建连接对象,造成内存开销过大,服务器崩溃。
(推荐视频:java视频教程)
连接池的步骤
1.创建连接池并配置连接属性。
2.使用连接池获取连接。
连接池的优势
每次需要连接数据库时,不需要建立连接,而是通过提供连接的连接池来获取。
使用连接后,不需要手动释放连接,而是让连接池释放连接。
可以通过连接池控制连接数,连接池中的连接可以多次重用,从而避免了无限制创建连接的问题。
使用连接池
使用C3P0数据库连接池
导入jar包:
C3p0-0.9.5.2.jar在当前项目的代码根src下创建一个名为c3p0-config.xml的新配置文件。注意文件名不能更改,内容如下:
C3 P0-配置
!-连接名称-
named-config name=mysql
!-连接数据库的驱动程序类名-
property name= driver class com . MySQL . JDBC . driver/property
!-连接属性-
属性名= JDBC URL JDBC:MySQL://192 . 168 . 35 . 128:3306/demo/property
属性名=“用户”根/属性
属性名=密码 123456/属性
!-连接池用完时等待新连接的时间。超时后,SQLException将在毫秒内抛出。如果设置为0,它将无限期等待。默认值为0。-
属性名称= check out time out 5000/属性
!-当连接用尽时,一次获得的连接数量-
属性名=acquireIncrement2/property
!-初始连接数-
属性名=initialPoolSize1/property
!-最小连接数-
属性名=minPoolSize3/property
!-最大连接数-
属性名=maxPoolSize5/property
/name-config
/c3p0-config程序代码:
公共类TestDataPool {
//根据配置文件中的名称创建一个连接池
public static combobooleddatasource CPDs=new combobooleddatasource( MySQL );
/**
*主程序
*/
公共静态void main(String[] args) {
//模拟对数据库的多次查询。
for(int I=0;i6;i ) {
新线程(新Runnable() {
@覆盖
公共无效运行(){
select();
}
},‘线程’I)。start();
}
}
/**
*查询程序
*/
公共静态void select() {
连接连接=空;
PreparedStatement pstmt=null
结果集rs=null
//获取连接并执行SQL
尝试{
conn=CPDs . getconnection();
pstmt=conn . prepare statement( select * from student where id=906 );
RS=PS TMT . execute query();
while (rs.next()) {
system . out . println(thread . current thread()。getName() \ t RS . getstring(1) \ t RS . getstring(2) \ t RS . getstring( address );
}
} catch(异常e) {
e . printstacktrace();
}最后{
//释放资源
尝试{
RS . close();
} catch (SQLException e) {
e。printstacktrace();
}
尝试{
pstmt。close();
} catch (SQLException e) {
e。printstacktrace();
}
尝试{
conn . close();
} catch (SQLException e) {
e。printstacktrace();
}
}
}
}使用二溴氯丙烷(二溴氯丙烷)数据库连接池
导入冲突包:
公共区dbcp-1.4.jar2公共区-池-1.5.5 .罐子在当前项目的代码根目录科学研究委员会下新建名为dbcp.properties的配置文件,文件名需要同代码中引用的文件名一致,内容如下:
# 接数据库的驱动类名
驱动程序类名=com。MySQL。JDBC。驾驶员
# 连接属性
URL=JDBC:MySQL://192。168 .35 .128:3306/演示
用户名=根
密码=123456
# 初始化连接数
initialSize=10
# 最大连接数
maxActive=15程序代码:
公共类TestDBCP {
//根据配置文件里的名称创建连接池
私有静态数据源源=空
静态{
Properties pros=new Properties();
InputStream is=测试dbcp。班级。获取类加载器().getResourceAsStream( dbcp。属性’);
尝试{
赞成。负载(是);
source=basicdatasourcefactory。创建数据源(pros);
} catch(异常e) {
e。printstacktrace();
}
}
/**
* 主程序
*/
公共静态void main(String[] args) {
//模拟多次对数据库的查询操作
for(int I=0;i6;i ) {
新线程(新Runnable() {
@覆盖
公共无效运行(){
select();
}
}, 线程我)。start();
}
}
/**
* 查询程序
*/
公共静态void select() {
连接连接=空;
PreparedStatement pstmt=null
结果集rs=空
//获取连接并执行结构化查询语言
尝试{
conn=源。getconnection();
pstmt=conn . prepare语句( select * from student where id=906 );
RS=PS TMT。执行查询();
while (rs.next()) {
系统。出去。println(线程。当前线程().getName() \ t RS。getstring(1) \ t RS。getstring(2) \ t RS。getstring(“address”);
}
} catch(异常e) {
e。printstacktrace();
}最后{
//释放资源
尝试{
RS。close();
} catch (SQLException e) {
e。printstacktrace();
}
尝试{
pstmt。close();
} catch (SQLException e) {
e。printstacktrace();
}
尝试{
conn . close();
} catch (SQLException e) {
e。printstacktrace();
}
}
}
}以上就是爪哇操作数据库——使用连接池连接数据库的详细内容,更多请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。