黑马程序员_使用DataSource接口连接数据源

本文介绍了使用DataSource接口连接数据源的优势,指出直接使用DriverManager的方式存在资源浪费问题。DataSource对象允许通过JNDI名字服务获取,简化了数据库连接信息的处理,并便于移植。此外,还提到了数据库连接池的概念,如Tomcat的DBCP连接池,能够有效管理并提高数据库操作性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------- android培训java培训、期待与您交流! ----------

普通的数据库连接往往直接使用DriverManager获取,这种方式需要将连接参数,如数据库驱动名、连接字符串、用户名、密码等数据库连接信息写到配置文件或者程序中,其他地方调用连接操作数据库之后,需要释放并关闭数据库连接,并没有重复利用数据库的连接资源。下面的示例代码给出了这种方式获取数据库连接的具体实现:

public static Connection getConnection() throws Exception{

//指定数据库驱动名

String driver = “org.gjt.mm.mysql.Driver” ;

//指定数据库连接url,此处连接本地mysql中的名为dbs的数据库

String url = “jdbc:mysql://localhost/dbs” ;

//指定连接数据库的用户名

String user = “root” ;

//指定连接数据库的密码

String pwd = “root”

//将驱动注册到虚拟机classpath环境

Class.forName(driver) ;

//调用DriverManagergetConnection方法获得一个连接

Connection conn = DriverManager.getConnection(url, user, pwd) ;

return conn ;

}

这段代码实现了Connection的获取功能,使用该方法无法重复利用连接资源,调用该方法的程序需要在用完之后关闭连接。创建一个连接是一个很费时间和资源的操作,需要与远程数据库之间进行“三次握手”。如果能把回收的连接重新利用,将会减少新创建连接的开销,显著地提高系统运行性能,JDBC2.0提供的DataSource为此提供了较好的解决方案。

一个DataSource对象代表一个真正的数据源。当一个DataSource对象注册到JNDIJava Naming and Directory Interface)名字服务中时,应用程序就可以通过JNDI名字服务获得DataSource对象,并用它们来产生一个与DataSource代表的数据源之间的连接。

关于数据源的连接信息,例如数据库服务器的驱动名、连接字符串、用户名、密码等,都包含在DataSource对象的属性中。这样,对应用程序的设计来说就更方便了,程序中不需要再处理这些信息,直接根据JNDI名字就可以获取DataSource,然后根据DataSource来获取连接。如果数据源要移植到另一个数据库驱动中,程序也很容易修改。所需要做的只是更改DataSource的相关属性,而使用DataSource对象的程序不需要做改动。

配置DataSource,包括设定DataSource的属性,然后将其注册到JNDI名字服务中去。在注册DataSource对象的过程中,需要把DataSource对象和一个逻辑名字关联起来,比如名字为“JDBC/BBS”。

本程序使用Tomcat内置的DBCP连接池实现DataSource。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接,来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

此处给出配置文件中连接池配置参数。

<Resource  auth = “Container”  name = “jdbc/bbs”  Forum = “javax.sql.DataSource”/>

<ResourceParams  name = “jdbc/bbs”>

<parameter>

    <name>url</name>  //设置数据库连接url

    <value>jdbc:mysql://localhost/bbs</value>  

//此处连接本地mysql中的名为bbs的数据库

</parameter>

<parameter>

    <name>maxIdle</name>  //可以同时闲置在连接池中的连接的最大数目

    <value>5</value>  

</parameter>

<parameter>

    <name>maxActive</name>  //最大激活连接数

    <value>50</value>  

</parameter>

<parameter>

    <name>maxWait</name>  //请求连接最大等待时间,以秒为单位

    <value>3000</value>  

</parameter>

<parameter>

    <name>driverClassName</name>  //指定数据库驱动名

    <value>org.gjt.mm.mysql.Driver</value>  //使用MySQL数据库JDBC驱动

</parameter>

<parameter>

    <name>removeAbandoned</name>  

//是否回收被遗弃的(一般是忘了释放的)数据库连接到连接池中

    <value>true</value>  

</parameter>

<parameter>

    <name>username</name>  //指定连接数据库的用户名

    <value>root</value>  

</parameter>

<parameter>

    <name>password</name>  //指定连接数据库的密码

    <value>root</value>  

</parameter>

<parameter>

    <name>factory</name>  //使用Tomcat内置的DBCP连接池

    <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>  

</parameter>

</ResourceParams>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值