Java数据库连接池(一)
Java数据库连接池(一)
几个概念 |
JDBC:Java Data Base Connectivity,java数据库连接,提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的行业标准。此 API 包括一个框架,凭借此框架可以动态地安装不同驱动程序来访问不同数据源。
JDBC API使得它可以做三件事:
l 与数据库或任何格式化数据源建立连接
l 发送SQL语句
l 处理响应
JDBC API优势:
在1997年1月推出以来,JDBC API已成为被广泛接受和实施。 JDBC API的灵活性,囊括了广泛的数据库厂商的实现。代表由其属性决定的数据源对象,当调用getConnection时将返回应用一个java.sql.Connection的实例,当然java.sql.Connection是接口,其实返回的是其实现类的实例。
l 促进进步伙伴,Sun公司在同行业中创造和迅速建立行业标准的,为Java访问数据库的应用程序开放了JDBC API的接口。
l 促进行业发展,领先的数据库,中间件和工具供应商已开发许多支持JDBC技术的新产品。使得客户能够建立可移植的Java应用程序,而从为更有竞争力的产品提供了广泛的选择。
l 利用现有的企业数据,利用JDBC技术,在不同的数据库管理系统中,企业不需要有特殊的设计,可以继续使用他们安装的数据库。
l 简化企业应用开发,使用Java API和JDBC API开发java应用更加简单容易,JDBC API隐藏许多底层的、繁琐的细节问题,从而带来的是低廉的学习成本、易于部署、维护。
l 零配置,有了JDBC API,不需要任何的配置或者是安装,紧紧是依赖于数据库Url或是JNDI注册一个DataSource对象。
实际上,JDBC就是将各个数据库之间的差异透明化,对于应用来说,无需关注操作数据库繁琐的细节问题,也不用去维护数据库连接,操作底层通信协议,只需要根据JDBC API统一的数据库访问API来编写代码,并且做到一次编写到处运行的效果。
而数据库厂商不需要关注众多、繁杂、形式各异的应用如何访问数据库,只需要依据JDBC API来提供相应的数据库访问驱动。对于厂商来讲应用的透明的。
通过以上描述,应用指导JDBC API相当于应用和数据库之间沟通和相互协作的桥梁,JDBC API制定了一些规范,用于统一他们之间的交互行为,使得两者之间相互透明化。
DriverManager:管理一组 JDBC 驱动程序的基本服务。作为初始化的一部分,DriverManager 类会尝试加载在 "jdbc.drivers" 系统属性中引用的驱动程序类。这允许用户定制由他们的应用程序使用的 JDBC Driver。例如,在 ~/.hotjava/properties 文件中,用户可以指定:
jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.taste.ourDriver
DriverManager 类的方法 getConnection 和 getDrivers 已经得到提高以支持 Java Standard Edition Service Provider 机制。 JDBC 4.0 Drivers 必须包括 META-INF/services/java.sql.Driver 文件。此文件包含 java.sql.Driver 的 JDBC 驱动程序实现的名称。例如,要加载 my.sql.Driver 类,META-INF/services/java.sql.Driver 文件需要包含下面的条目:
my.sql.Driver
应用程序不再需要使用 Class.forName() 显式地加载 JDBC 驱动程序。当前使用 Class.forName() 加载 JDBC 驱动程序的现有程序将在不作修改的情况下继续工作。
在调用 getConnection 方法时,DriverManager 会试着从初始化时加载的那些驱动程序以及使用与当前 applet 或应用程序相同的类加载器显式加载的那些驱动程序中查找合适的驱动程序。
DataSource:DataSource
接口是 JDBC 2.0 API 中的新增内容,它提供了连接到数据源的另一种方法(相对于DriverManager)。使用 DataSource
对象是连接到数据源的首选方法。DataSource隔离了应用和数据源,使得数据源对于应用程序来说是透明的。一个DataSource
从JDBC4.0开始有两个比较重要的特性:
l ConnectionPoolDataSource:支持Connection连接的缓存和重用,从而提高应用程序的性能和可扩展性。
l XADataSource :支持分布式事务。
Connection:对象代表与数据源进行的唯一会话。如果是客户端/服务器数据库系统,该对象可以等价于到服务器的实际网络连接。取决于提供者所支持的功能,Connection 对象的某些集合、方法或属性有可能无效。
Java.sql.Connection:
Java.sql.Connection是属于JDBC API中核心接口,该接口定义描述其表、所支持的 SQL 语法、存储过程、此连接功能等等的信息。此信息是使用 getMetaData 方法获得的。
Connection:
指应用于数据库之间物理上的一条有效链路,通过该链路应用可以与数据库进行交互,并且该链路由各个厂商的驱动程序来完成具体的实现细节,隐藏底层的复杂性。
Driver:
Java.sql.Driver:
每个驱动程序类必须实现的接口。 Java SQL 框架允许多个数据库驱动程序。 每个驱动程序都应该提供一个实现 Driver 接口的类。 DriverManager的getConnection方法会尽可能的寻找Driver的实现类,并通过该实现类的connect方法去获取一个连接,并且该连接是由DriverManager来决定其一些属性的,例如url,username,password。
通过Class.forName();可以显示的向DriverManager注册一个驱动程序。
以下是大部分的数据库厂商以及对应提供的驱动实现类:
JDBC-ODBC Bridge (com.ms.jdbc.odbc.JdbcOdbcDriver) JDBC-ODBC Bridge (sun.jdbc.odbc.JdbcOdbcDriver) HSQLDB (server) (org.hsqldb.jdbcDriver) HSQLDB (file) (org.hsqldb.jdbcDriver) Ingres (com.ingres.jdbc.IngresDriver) Informix (com.informix.jdbc.IfxDriver) inetdae7 (com.inet.tds.TdsDriver) IBM DB2 (COM.ibm.db2.jdbc.app.DB2Driver) Cloudscape (COM.cloudscape.JDBCDriver) MySQL (com.mysql.jdbc.Driver) MySQL (org.gjt.mm.mysql.Driver) MS SQLServer (net.sourceforge.jtds.jdbc.Driver) MS SQLServer (com.merant.datadirect.jdbc.sqlserver.SQLServerDriver) MS SQLServer (2005) (com.microsoft.sqlserver.jdbc.SQLServerDriver) MS SQLServer (2000) (com.microsoft.jdbc.sqlserver.SQLServerDriver) MS SQLServer (com.internetcds.jdbc.tds.Driver) Oracle (oracle.jdbc.driver.OracleDriver) PostgreSQL (org.postgresql.Driver) Sybase (com.sybase.jdbc2.jdbc.SybDriver) Vertica (com.vertica.Driver)
连接池:数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
JDBC4.0 API已经将数据库连接池纳入到规范当中,意在在众多的连接池中制定一套规范,使得应用和连接池之间更加透明化。由此可见,连接池的重要程度。
以上几个概念之间的关系: