关于jdbc和数据库连接池的关系(不是封装的关系)
你都说是数据库连接池了。那就是连接数据库用的。JDBC是java封装的对数据库的操作。当然你可以自己进一步封装。数据库连接池是JDBC使用的前提,如果连数据库连接池都没连上,JDBC的操作就谈不上了。而光有数据库连接池也没用啊,你连上了数据库不对其进行操作不是白连了么。所以就需要JDBC了。 一直没有搞清楚,JDBC的数据源与连接池是怎么一样的关系,直到今天做系统的时候,遇到了连接池如果管理有效的连接及资源的占用,释放的问题.
数据源并不等于连接池,它不是必须要求实现连接池的,即连接池是数据源的一种.下面的一段网上摘要可以佐证:
一个基础DataSource实现,没有实现连接池,典型的,由JDBC驱动厂商提供。在基础DataSource实现中,下面的是真实的:
- DataSource?.getConnection方法创建一个新的Connection对象,来代表一个物理连接并封装对该连接的所有安装和管理工作。
- Connection.close方法关闭物理连接并释放相关资源。
在包括连接池的DataSource实现中,在幕后有一系列重大事件发生。在如上实现中,下面的是真实的:
- DataSource?实现包括一个实现的指定连接池模块会管理一缓冲区的PooledConnection对象。DataSource对象典型的由应用服务器实现作为一层在驱动实现ConnectionPoolDataSource和PooledConnection接口的顶层。
- DataSource?.getConnection 调用PooledConnection.getConnection方法来获得一个指定物理连接的逻辑句柄。只有当连接池中没有可用的连接时,才会出现建 立新物理连接的花费。当需要一个新的物理连接时,连接池管理器会调用ConnectionPoolDataSource的 getPooledConnection方法来创建一个。管理物理连接的工作由PooledConnection对象代理。
- Connection.close方法关闭逻辑句柄,但物理连接还存在。连接池管理器被通知指定的PooledConnection对象现在可以重用了。如果应用程序试图重用逻辑句柄,Connection实现会抛出一个SQLException。
- 单一一个物理PooledConnection对象会在生命期内产生许多逻辑Connection对象。对一个给定的PooledConnection对 象,只有最新生成的逻辑Connection对象才有效。当相关的PooledConnection.getConnection被调用时,任何先前存在 的Connection对象会被自动关闭。监听器(连接池管理器)不会被通知该事件。
- 一个连接池管理器通过调用PooledConnection.close方法关闭物理连接。该方法典型的只有在特定环境下被调用:当应用服务器遇到正常的关闭,当连接缓冲区正在被重新初始化,或者当应用服务器收到一个事件指出连接出现一个无法恢复的错误时。
在使用conection及statement后应该关闭,不然会由于垃圾收集器不能有效的释放资源而导致数据库的游标使用超过限制,而出现SQLException异常.所以在以后使用jdbc的时候不要把createStatement和prepareStatement都应该要放在循环外面,而且使用了这些Statment后,及时关闭。最好是在执行了一次executeQuery、executeUpdate等之后,如果不需要使用结果集(ResultSet)的数据,就马上将Statment关闭。
关于jdbc和数据库连接池的关系(不是封装的关系)的更多相关文章
- 数据库连接JDBC和数据库连接池C3P0自定义的java封装类
数据库连接JDBC和数据库连接池C3P0自定义的java封装类 使用以下的包装类都需要自己有JDBC的驱动jar包: 如 mysql-connector-java-5.1.26-bin.jar(5.1 ...
- Java -- JDBC 学习--数据库连接池
JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet.beans)中建立数据库连接. 进行sql操作 断开数据库连接. 这种模式开 ...
- JDBC【数据库连接池、DbUtils框架、分页】
1.数据库连接池 什么是数据库连接池 简单来说:数据库连接池就是提供连接的... 为什么我们要使用数据库连接池 数据库的连接的建立和关闭是非常消耗资源的 频繁地打开.关闭连接造成系统性能低下 编写连接 ...
- Java Web(九) JDBC及数据库连接池及DBCP,c3p0,dbutils的使用
DBCP.C3P0.DBUtils的jar包和配置文件(百度云盘):点我下载 JDBC JDBC(Java 数据库连接,Java Database Connectify)是标准的Java访问数据库的A ...
- 基于JDBC的数据库连接池技术研究与应用
引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的3层开 ...
- spring配置tomcat jdbc pool数据库连接池
<bean id="sqliteDataSource" class="org.apache.tomcat.jdbc.pool.DataSource" de ...
- JavaEE JDBC 了解数据库连接池
了解数据库连接池 @author ixenos 数据库连接是有限的资源,如果用户需要离开应用一段时间,那么他占用的连接就不应该保持开放状态: 另一方面,每次查询都获取连接并在随后关闭它的代价也很高. ...
- JDBC和数据库连接池
JDBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成. ● JDBC ● C3P0 ● DRUID 一.JDBC ...
- Jdbc druid数据库连接池
//测试类package druid; import util.JdbcUtilsDruid; import java.sql.Connection; import java.sql.Date; im ...
随机推荐
- linux Apache 日志轮询
安装日志轮询工具 cronolog [root@Nagios-Server tools]# wgethttp://cronolog.org/download/cronolog-1.6.2.tar.gz ...
- Python----公开课
# 构造函数- 类在实例化的时候,执行一些基础性的初始化的工作- 使用特殊的名称和写法- 在实例化的时候自动执行- 是在实例化的时候第一个被执行的函数- ----------------------- ...
- Python---进阶---文件操作---获取文件夹下所有文件的数量和大小
一.####编写一个程序,统计当前目录下每个文件类型的文件数 ####思路: - 打开当前的文件夹 - 获取到当前文件夹下面所有的文件 - 处理我们当前的文件夹下面可能有文件夹的情况(也打印出来) - ...
- vue面试题专题
1,v-if和v-show的作用是什么?有什么区别? v-if: 创建---删除,没有元素.切换开销大.适合不频繁切换的情况用. 例子:制作搜索框,导航栏和搜索框重叠的两个框,点击搜索图 ...
- Vuex-全局状态管理【简单小案例】
前言: Vuex个人见解: 1.state :所有组件共享.共用的数据.理解为不是一个全局变量,不能直接访问以及操作它.2.mutations : 如何操作 state 呢?需要有一个能操作state ...
- 使用idea对XML的增删改查
XML:是一种可扩展标记性的语言,与java语言无关,它可以自定义标签. 1.首先需要到导入Dom4j架包,与自己所时候的ide关联 2.编写自己的xml文件,入上图所示(里面的所有元素及元素中的属性 ...
- Eclipse设置类和方法的注释模板
一.打开设置模板的窗口:Window->Preference->Java->Code Style->Code Template展开Comments,最常用的就是类和方法的注释, ...
- [洛谷3934]P3934 Nephren Ruq Insania题解
先放个奈芙莲 解法 看到这种题目就知道是欧拉降幂,然后根据某玄学证明,递归欧拉降幂从l到r不会超过\(\Theta(log_n)\),所以直接递归解决,然后区间修改直接树状数组维护一下 然后就A了 代 ...
- 终于决定要开始写自己的博客了,先Mark一下
终于决定要开始写了,但事实是,打开就觉得浪费时间,懒癌犯了
- kibana的安装和监控
1.1:kibana搭建 kibana只需要在一台机器安装即可 1):解压 tar -zxvf kibana-5.5.2-linux-x86_64.tar.gz -C /home/angel/serv ...