jdbc连接池

基于JDBC的应用中几乎全是围绕Connection接口展开的,必须创建一个连接Connection,此连接相当于应用和数据库之间的一个通道,并且它还是事务的边界,只有通过同一个Connection执行的SQL语句才能组成一个事务。

在一个服务器的应用中,会处理来自多个不同用户的请求,并且必须为每一个用户保持并打开一个链接(防止事务的崩溃),由于创建一个Connection的尽管实现起来简单,但对于大流量的服务器应用来说却要花费大量的时间。

为了使链接的时间尽可能的少,解决方法有以下几种:

一:为每个访问数据的servletjsp页面维护一个Connection,并保持在一个实例变量中,直到应用关闭,但这样会导致大量的多线程问题。另外对于数据库能保持的连接数代价时昂贵的,商业数据指定价格一部分时基于同时打开的连接数的。

二:最好的做法就是使用一个连接池。其优点有以下几点:

1:创建链接的时间缩短,因为在池中链接时可以重用的。

2:解决了多线程的问题。

3:连接池可以指定Connection的最大连接数,使得每一个链接得到最高效的利用。

另外:由于所有的用户使用的时同样的Connection对象,因此不能依赖数据库引擎着个的限制用户对保护资源的访问,因此要为不同的用户角色组使用不同的连接池,为不同的数据帐户来创建不同的Connection对象。

jdk文档中明确说明了:DataSource是一个接口,作为 DriverManager 工具的替代项,DataSource 对象是获取连接的首选方法。

实现此接口的类可以提供连接池功能。

PooledConnection类,该类为连接池管理提供钩子 (hook) 的对象。PooledConnection 对象表示到数据源的物理连接,当应用程序调用 DataSource.getConnection 方法时,它取回 Connection 对象。如果连接池已完成,则该 Connection 对象实际上是到 PooledConnection 对象的句柄,这是一个物理连接。

需要注意的是当应用调用close()方法时,并不是关闭数据库链接,而是通知其链接在池中已不再使用,然后DataSource会将该PooledConnection返回至连接池。

基于JDBC的应用中几乎全是围绕Connection接口展开的,必须创建一个连接Connection,此连接相当于应用和数据库之间的一个通道,并且它还是事务的边界,只有通过同一个Connection执行的SQL语句才能组成一个事务。

在一个服务器的应用中,会处理来自多个不同用户的请求,并且必须为每一个用户保持并打开一个链接(防止事务的崩溃),由于创建一个Connection的尽管实现起来简单,但对于大流量的服务器应用来说却要花费大量的时间。

为了使链接的时间尽可能的少,解决方法有以下几种:

一:为每个访问数据的servletjsp页面维护一个Connection,并保持在一个实例变量中,直到应用关闭,但这样会导致大量的多线程问题。另外对于数据库能保持的连接数代价时昂贵的,商业数据指定价格一部分时基于同时打开的连接数的。

二:最好的做法就是使用一个连接池。其优点有以下几点:

1:创建链接的时间缩短,因为在池中链接时可以重用的。

2:解决了多线程的问题。

3:连接池可以指定Connection的最大连接数,使得每一个链接得到最高效的利用。

另外:由于所有的用户使用的时同样的Connection对象,因此不能依赖数据库引擎着个的限制用户对保护资源的访问,因此要为不同的用户角色组使用不同的连接池,为不同的数据帐户来创建不同的Connection对象。

jdk文档中明确说明了:DataSource是一个接口,作为 DriverManager 工具的替代项,DataSource 对象是获取连接的首选方法。

实现此接口的类可以提供连接池功能。

PooledConnection类,该类为连接池管理提供钩子 (hook) 的对象。PooledConnection 对象表示到数据源的物理连接,当应用程序调用 DataSource.getConnection 方法时,它取回 Connection 对象。如果连接池已完成,则该 Connection 对象实际上是到 PooledConnection 对象的句柄,这是一个物理连接。

需要注意的是当应用调用close()方法时,并不是关闭数据库链接,而是通知其链接在池中已不再使用,然后DataSource会将该PooledConnection返回至连接池。

1

你可能感兴趣的:(多线程,sql,jsp,应用服务器,jdbc)