




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
内容大纲什么是数据库连接池为什么要用数据库连接池如何用数据库连接池Tip:使用数据库连接池优化程序性能DBdaoservlet用户3用户1用户2用户nconnection缺点:用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出、拓机。应用程序直接获取链接的缺点Tip:使用数据库连接池优化程序性能DBdaoservlet用户3用户1用户2用户n
connectionconnectionconnectionconnectionconnection连接池用从连接池中获得的连接与数据库通迅Tip:编写数据库连接池编写连接池需实现java.sql.DataSource接口。DataSource接口中定义了两个重载的getConnection方法:ConnectiongetConnection()ConnectiongetConnection(String
username,String
password)实现DataSource接口,并实现连接池功能的步骤:在DataSource构造函数中批量创建与数据库的连接,并把创建的连接加入LinkedList对象中。实现getConnection方法,让getConnection方法每次调用时,从LinkedList中取一个Connection返回给用户。当用户使用完Connection,调用Connection.close()方法时,Collection对象应保证将自己返回到LinkedList中,而不要把conn还给数据库。Collection保证将自己返回到LinkedList中是此处编程的难点。
Tip:数据库连接池核心代码使用动态代理技术构建连接池中的connectionproxyConn=(Connection)Proxy.newProxyInstance(this.getClass() .getClassLoader(),conn.getClass().getInterfaces(), newInvocationHandler(){ //此处为内部类,当close方法被调用时将conn还回池中,其它方法直接执行 publicObjectinvoke(Objectproxy,Methodmethod, Object[]args)throwsThrowable{ if(method.getName().equals("close")){ pool.addLast(conn); returnnull; } returnmethod.invoke(conn,args); } });Tip:开源数据库连接池现在很多WEB服务器(Weblogic,WebSphere,Tomcat)都提供了DataSoruce的实现,即连接池的实现。通常我们把DataSource的实现,按其英文含义称之为数据源,数据源中都包含了数据库连接池的实现。也有一些开源组织提供了数据源的独立实现:DBCP数据库连接池C3P0数据库连接池实际应用时不需要编写连接数据库代码,直接从数据源获得数据库的连接。程序员编程时也应尽量使用这些数据源的实现,以提升程序的数据库访问性能。Tip:DBCP数据源DBCP是Apache软件基金组织下的开源连接池实现,使用DBCP数据源,应用程序应在系统中增加如下两个jar文件:Commons-dbcp.jar:连接池的实现Commons-pool.jar:连接池实现的依赖库Tomcat的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。Tip:DBCP数据源使用DBCP示例代码:static{ InputStreamin=JdbcUtil.class.getClassLoader(). getResourceAsStream("perties"); Propertiesprop=newProperties(); prop.load(in); BasicDataSourceFactoryfactory=newBasicDataSourceFactory(); dataSource=factory.createDataSource(prop);}Tip:
C3P0数据源Tip:配置Tomcat数据源查看Tomcat文档,示例代码:ContextinitCtx=newInitialContext();ContextenvCtx=(Context)initCtx.lookup("java:comp/env");dataSource=(DataSource)envCtx.lookup("jdbc/datasource");<Context><Resourcename="jdbc/datasource"auth="Container"type="javax.sql.DataSource"username="root"password="root"driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/jdbc"maxActive="8"maxIdle="4"/></Context>特别提醒:此种配置下,驱动jar文件需放置在tomcat的lib下Tip:JNDI技术简介JNDI(JavaNamingandDirectoryInterface),Java命名和目录接口,它对应于J2SE中的javax.naming包,这套API的主要作用在于:它可以把Java对象放在一个容器中(JNDI容器),并为容器中的java对象取一个名称,以后程序想获得Java对象,只需通过名称检索即可。其核心API为Context,它代表JNDI容器,其lookup方法为检索容器中对应名称的对象。DataBaseMetaData的使用在企业开发中,数据迁移是经常会遇到的事情,此时,需要搞清楚,源数据库与目的数据库之间表以及表内部各列之间的异同。而有些时候,我们拿到的项目文档,未必能准确表述各个表的准确结构,即使应用建模工具反向导出物理结构,但依靠人工比对,也是很困难的一件事情。而此时,如果能“反编译数据库”,提取表信息以及表内部各列的信息,然后通过程序自动进行比较,并将比较结果以报表的形式输出,那么这个问题就简单很多了。此间“反编译数据库”要解决两个问题,一个是数据库中每个用户表的名称是什么,另外一个就是对于规定的表名称,其内部结构是什么样的,比如有那些列,每列的数据类型,长度等等信息。Tip:元数据-DataBaseMetaData元数据:数据库、表、列的定义信息。对象获取Connection.getDatabaseMetaData()DataBaseMetaData对象getURL():返回一个String类对象,代表数据库的URL。getUserName():返回连接当前数据库管理系统的用户名。getDatabaseProductName():返回数据库的产品名称。getDatabaseProductVersion():返回数据库的版本号。getDriverName():返回驱动驱动程序的名称。getDriverVersion():返回驱动程序的版本号。isReadOnly():返回一个boolean值,指示数据库是否只允许读操作。Tip:元数据-ParameterMetaDataPreparedStatement.getParameterMetaData()获得代表PreparedStatement元数据的ParameterMetaData对象。ParameterMetaData对象getParameterCount()获得指定参数的个数getParameterType(int
param)获得指定参数的sql类型Tip:元数据-ResultSetMetaDataResultSet.getMetaData()获得代表ResultSet对象元数据的ResultSetMetaData对象。ResultSetMetaData对象getColumnCount()
返回resultset对象的列数getColumnName(int
column)获得指定列的名称
getColumnTypeName(int
column)获得指定列的类型Tip:使用元数据简化JDBC代码业务背景:系统中所有实体对象都涉及到基本的CRUD操作:所有实体的CUD操作代码基本相同,仅仅发送给
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重庆电力高等专科学校《统一建模语言UML》2023-2024学年第二学期期末试卷
- 保安证考试答题技巧提升办法及答案
- 四川省广安、眉山、内江、遂宁2025年高三5月毕业考试生物试题理试题含解析
- 2025年保安证考试模拟题及答案解析
- 山东省潍坊市教科所2025届高三下学期第三次月考化学试题试卷含解析
- 商丘幼儿师范高等专科学校《大数据与会计专业认知教育》2023-2024学年第二学期期末试卷
- 南通理工学院《房屋构建原理》2023-2024学年第二学期期末试卷
- 福建省福州市仓山区师范大学附中2025年高考复习全程精练模拟卷(全国I卷)生物试题含解析
- 兰州大学《钢筋混凝土结构与砌体结构》2023-2024学年第一学期期末试卷
- 浙江省“温州十校联合体”2024-2025学年高三七校联考生物试题试卷含解析
- 小学中高年级语文整本书阅读教学策略
- 危化品运输安全应急救援演练
- 中国重症加强治疗病房(ICU)建设与管理指南课件
- 2024年广东湛江港集团股份有限公司招聘笔试参考题库附带答案详解
- 社区开展口腔健康知识讲座科普
- 全科医学培养中的医疗信息化与数字化
- 韦尼克脑病个案护理
- 《高危药品管理》课件
- 2022-2023学年湖北省鄂东南省级示范高中教育教学改革联盟学校高一下学期期中联考物理试题
- 2023年6月大学生英语四级真题试卷及详细答案(三套)
- 密闭取芯完整
评论
0/150
提交评论