------- 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) ; //调用DriverManager的getConnection方法获得一个连接 Connection conn = DriverManager.getConnection(url, user, pwd) ; return conn ; } |
这段代码实现了Connection的获取功能,使用该方法无法重复利用连接资源,调用该方法的程序需要在用完之后关闭连接。创建一个连接是一个很费时间和资源的操作,需要与远程数据库之间进行“三次握手”。如果能把回收的连接重新利用,将会减少新创建连接的开销,显著地提高系统运行性能,JDBC2.0提供的DataSource为此提供了较好的解决方案。
一个DataSource对象代表一个真正的数据源。当一个DataSource对象注册到JNDI(Java 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> |