关于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 ...
随机推荐
- Cockpit- Linux 服务器管理接口
Cockpit- Linux 服务器管理接口 功能 它包含 systemd 服务管理器. 有一个用于故障排除和日志分析的 Journal 日志查看器. 包括 LVM 在内的存储配置比以前任何时候都要简 ...
- nginx 启动关闭
#检查语法 /application/nginx/sbin/nginx –t #平滑重启 /application/nginx/sbin/nginx –s reload #不间断服务重启,将 pid ...
- PAT Basic 1027 打印沙漏 (20 分)
本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号:各行符号中心对齐:相邻两 ...
- JVM 常量池、运行时常量池、字符串常量池
常量池: 即class文件常量池,是class文件的一部分,用于保存编译时确定的数据. 保存的内容如下图: D:\java\test\out\production\test>javap -ver ...
- 前端每日实战:122# 视频演示如何用纯 CSS 创作一个苹果系统的相册图标
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/zJKwbO 可交互视频 此视频是可 ...
- git概述(三)
Bug分支: 当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交: 并不是你不想提交,而是工作只进行 ...
- java课堂测试2
//信1605-2 20163428 刘宏琦import java.util.*;public class Number { /** * @param args */ public void pand ...
- Node.js 版本管理工具——nvm
日常项目开发中,有些项目可能基于node V10 或者 V8 不同的版本: 如果我们手动安装卸载node,这样是不友好. 先放上作者的博客地址 : https://www.cnblogs.com/g ...
- luogu 2219[HAOI2007]修筑绿化带 单调队列
Code: #include<bits/stdc++.h> using namespace std; #define setIO(s) freopen(s".in",& ...
- 5 November
拓扑排序 for (int i=1; i<=n; ++i) if (!ind[i]) q.push(i); while (!q.empty()) { int now=q.top(); q.pop ...