Java Web项目oracle创建数据库数据库版帮我改为MySQL数据库

【java实例】自己写的mysql数据库管理系统————MANAGER_FOR_MYSQL-1.0
&&&&&&&&& 学习java一年之久,一直没有写什么较大的项目,大约一个星期前,所用的mysql管理软件navucat,提示试用期已到,心中无限苍凉,细分析,觉得根据已有的java知识,完全可以自己设计一款适合自己的mysql管理软件,起名为MANAGER_FOR_MYSQL,于是开始自己的mysql管理软件设计之路。
&&&&&&& 对于设计的成果,可参看上一篇博文所介绍,文末提供了源代码以及jar可运行java程序供参考,下文主要介绍一下设计过程。
第一章 概述
第一节 序言
&&& 开放源代码数据库管理系统(DBMS)逐渐受到人们的关注,并已经成功地应用到多种系统之中,MySQL是其中比较出色的一个。它具有功能强、使用简便、管理方便、运行速度快、安全可靠性强等优点,用户可利用许多语言编写访问MySQL数据库的程序。现在很多的网站、企业局域网和个人资料库都是用MySQL作为后台数据库,足以表明现在MySQL广泛的应用。并且MySQL具有很多重要特征:
(1)使用核心线程的完全多线程,意味着它 能很容易地利用多CPU;
(2)具有C、C++、Eiffel、Java、Parl、PHP、 Python和TCL等多种语言的API;
(3)可运行在多种不同的平台上:
(4)利用一个优化的一遍扫描多重联结能够 快速地进行联结:
(5)在查询的SELECT和WHERE部分,支 持全部运算符和函数;
(6)全面支持SQL的GR0uP BY和ORDER BY 子旬,支持聚合函数COUNT()、c0uNT (DISTINCT)、AVG()、STD()、SUM ()、MAX() 和MIN(); (7)支持ANSI SQL的LEFT OUTER JOIN 和ODBC语法;
(8)有一个非常灵活且安全的权限和口令系 统,允许基于主机的认证,而且口令是安全的,因 为当与一个服务器连接时,所有口令传送被加密。
但MySQl安装之后主要使用命令行界面进行数据库操纵和管理,很多用户在Windows环境中一直使用图形用户界面(GUI)来操作和管理数据库,对命令行方式可能不习惯,而很多新手 更是觉得MySQL不容易掌握.为了方便用户对 MySQL数据库进行管理,现在早就有一些MySQL图形化用户管理工具,但这些工具功能参差不齐,各有特色,目前流行的主要有以下几种:
(1)MySQL Workbench是一款图形化的数据库设计工具,它在一个开发环境中集成了SQL的开发,管理,数据库设计,创建以及维护。它是 fabFORCE.net旗下DBDesigner 4的继承者,并替代了MySQL GUI Tools Bundle。
(2) 用于MySQL的Navicat既是一个数据库管理器同时还是一个开发工具。它适用于从3.21以上的任何MySQL数据库服务器,并且支持包括触 发器,存储过程,函数,事件,预览和用户管理在内的绝大多数最新的MySQL功能。
(3) Sequel Pro用于管理MySQL数据库(本地或在Internet上)。您可以使用它来添加删除数据库和表,修改字段和索引,预览和过滤表的内容,添加编辑删除 行,执行自定义查询,转储表或整个数据库。
(4) HeidiSQL是一款免费的开源客户端,由德国程序员Ansgar Becker开发,同时还得到了一些Delphi贡献者的帮助。用户必须通过许可证书创建一个会话登陆本地或远程MySQL服务器,才可以使用 HeidiSQL管理数据库。通过这个会话,用户可以管理所链接的MySQL服务器的MySQL数据库,并在完成之后断开。它的功能集足够应付绝大多数常见和高级数据库,表,数据记录选项,但是目前还处于积极的开发中,以求能实现MySQL前端的所有功能。
(5) PhpMyAdmin是一款免费的软件工具,采用PHP编写,用于在线处理MySQL管理。PhpMyAdmin支持多种MySQL操作,最常用的 操作包括管理数据库,表,字段,关系,索引,用户,权限。同时还允许您直接执行SQL语句。 MySQL是一个快速的客户机/服务器结构 的SQL数据库管理系统,由一个服务器守护程序 mysqld及很多不同的客户程序和库组成 虽然它 不是开放源代码产品,但可以自由使用。由于其
功能强大、灵活性好、应用编程接口丰富以及系 统结构精巧,从而受到广大软件用户的青睐。
&&& 由此可见,MySQL的GUI管理工具各有特色,并且有的工具不是开源的,要收取一定费用,有的对平台要求较高,迁移性较差,而我们将基于java语言构建一个GUI management for mysql,来实现对MySQL数据库的操作与管理,首先java是一种比较纯粹的面向对象语言,其次它是跨平台的,在windows下的代码完全不用修改即可在其他系统比如unix,linux下面运行,这样就可以实现管理工具的跨平台性;另外进一步可以实现开源软件,拓展其功能与特性,又可以根据自己的习惯与喜好,修改代码,得到适合与自己的数据库管理工具;重要的是根据MySQL的特性实现C\S的特点,利于数据的独立性,修改GUI代码,不会影响已经建立的数据库。
第二节相关理论
一、JAVA 与JDBC
&&& JDBC(Java Data Base Connectivity , java数据库连接)[3]是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序。
对于不同厂商数据库,程序员只需用JDBC API写一个程序,便可向相应数据库发送SQL调用。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。
  Java 具有坚固、安全、易于使用、易于理解和可从网络上自动下载等特性,是编写数据库应用程序的杰出语言。所需要的只是 Java应用程序与各种不同数据库之间进行对话的方法。而 JDBC 正是作为此种用途的机制。
&&& JDBC 扩展了 Java 的功能。例如,用 Java 和 JDBC API 可以发布含有 applet 的网页,而该 applet 使用的信息可能来自远程数据库。企业也可以用 JDBC 通过 Intranet 将所有职员连到一个或多个内部数据库中(即使这些职员所用的计算机有 Windows、 Macintosh 和UNIX 等各种不同的操作系统)。随着越来越多的程序员开始使用Java 编程语言,对从
Java中便捷地访问数据库的要求也在日益增加。
&&& JDBC 是个&低级&接口,也就是说,它用于直接调用 SQL 命令。在这方面它的功能极佳,并比其它的数据库连接 API 易于使用,但它同时也被设计为一种基础接口,在它之上可以建立高级接口和工具。高级接口是&对用户友好的&接口,它使用的是一种更易理解和更为方便的 API,这种API在幕后被转换为诸如 JDBC 这样的低级接口。
&&&& 在关系数据库的&对象/关系&映射中,表中的每行对应于类的一个实例,而每列的值对应于该实例的一个属性。于是,程序员可直接对 Java 对象进行操作;存取数据所需的 SQL 调用将在&掩盖下&自动生成。此外还可提供更复杂的映射,例如将多个表中的行结合进一个 Java 类中。
&&&& 随着人们对 JDBC 的兴趣日益增涨,越来越多的开发人员一直在使用基于 JDBC 的工具,以使程序的编写更加容易。程序员也一直在编写力图使最终用户对数据库的访问变得更为简单的应用程序。例如应用程序可提供一个选择数据库任务的菜单。任务被选定后,应用程序将给出提示及空白供填写执行选定任务所需的信息。所需信息输入应用程序将自动调用所需的SQL 命令。在这样一种程序的协助下,即使用户根本不懂 SQL 的语法,也可以执行数据库任务。
 & 在网络连接模式中,有一种传统的网络连接模式,即客户机/服务器网,Client/Server。在客户机/服务器网络中,服务器是网络的核心,而客户机是网络的基础,客户机依靠服务器获得所需要的网络资源,而服务器为客户机提供网络必须的资源。
C/S它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到 Client端和Server端来实现,降低了系统的通讯开销。虽然现在B/S模式冲击着C/S,但C/S依旧有其用武之地。首先,应用服务器运行数据负荷较轻。最简单的C/S体系结构的数据库应用由两部分组成,即客户应用程序和数据库服务器程序。二者可分别称为前台程序与后台程序。运行数据库服务器程序的机器,也称为应用服务器。一旦服务器程序被启动,就随时等待响应客户程序发来的请求;客户应用程序运行在用户自己的电脑上,对应于数据库服务器,可称为客户电脑,当需要对数据库中的数据进行任何操作时,客户程序就自动地寻找服务器程序,并向其发出请求,服务器程序根据预定的规则作出应答,送回结果,应用服务器运行数据负荷较轻。其次,数据的储存管理功能较为透明。在数据库应用中,数据的储存管理功能,是由服务器程序和客户应用程序分别独立进行的,前台应用可以违反的规则,并且通常把那些不同的(不管是已知还是未知的)运行数据,在服务器程序中不集中实现,所有这些,对于工作在前台程序上的最终用户,是“透明”的,他们无须过问(通常也无法干涉)背后的过程,就可以完成自己的一切工作。
&&& MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中 。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。号MySQL AB被Sun公司收购。而2009年,SUN又被Oracle收购。就这样如同一个轮回,MySQL成为了Oracle公司的另一个数据库项目。MySQL有优良的系统特性:
(1)使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植。(2)支持AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统
(3)为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
(4)支持多线程,充分利用CPU资源
(5)优化的SQL查询算法,有效地提高查询速度
(6)既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。
(7)提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。
(8)提供TCP/IP、ODBC和JDBC等多种数据库连接途径。
(9)提供用于管理、检查、优化数据库操作的管理工具。
(10)支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
(11)支持多种存储引擎。
第二章 可行性分析
第一节 技术可行性
该系统主要依靠Java语言中的swing、swt的界面设计包及其JDBC连接MySQL数据库来实现,java技术成熟稳定,技术上完全可行。
第二节 经济可行性
该系统开发成本低,所需开发时间、人力均较少、使用常规设计软件、辅助工具即可实现,所需资料文档较易获得,查阅相关资料方便。
第三章 需求分析
第一节系统开发目标
系统开发的目标是完成对于MySQL数据库客户端GUI的设计及功能实现。系统功能是:(1)实现对数据库的操纵及管理的基本功能:连接远程或本地MySQL数据库,创建、删除数据库,创建、编辑、删除表及视图、索引,表的查询等(2)实现常规软件的新建、保存、另存为、退出、基本配置等功能。用户可以使用简单的界面操作实现对本地或远程的MySQL数据库进行操作以及相应的的查询操作。
第二节 运行环境
客户端运行环境:任何一台安装有JAVA虚拟机的PC机。
第三节 功能需求
相应的功能需求有以下方面。
(1)&&&& 用户通过已有的用户名、密码、数据库名连接远程或本地MySQL数据库。
(2) 通过点击数据库树状图可以查看该数据库中的表的内容,及其字段的约束。
(3) 通过选择当前数据库的下拉列表可以从新连接更新的数据库
(4) 创建、删除数据库。
(5) 选择当前数据库,通过菜单命令及视图、索引。
(6) 通过菜单命令新建文本编辑区、保存、另存为。
(7) 通过菜单命令软件基本配置、软件退出功能。
(8) 选择当前数据库,通过文本编辑区执行SQL定义语言、SQL操纵语言。
(9) 通过文本编辑区进行表的查询操作
(10)状态栏时刻显示软件的所处状态。
一、确定执行者
执行者为可以连接到MySQL数据库管理用户
二、确定用例
MySQL数据库管理的用例通过UML用例图来实现,如图1.。
三、用例文档
1、&&& 连接远程或本地MySQL数据库
用例名:连接数据库
入口条件:用户至少拥有一个远程或本地MySQL数据库的访问权限
事件流:用户打开系统或单击连接数据库按钮,系统弹出连接面板,输入IP、port、数据库名、用户名、密码[5],确定后连接相应数据库,当前数据库下拉列表显示数据库名,数据库管理树状列表开始初始化。连接数据库活动图如图2.。
出口条件:数据库管理树状列表初始化完成。
异常事件:网络故障或用户密码数据库名等输入错误。
2、&&& 查看当前数据库表的内容,及其字段的约束
用例名:查看数据库
入口条件:已经连接并树状管理器成功初始化
事件流:用户单击树状管理器的表节点或字段节点,系统连接数据库,在结果显示栏显示数据库内的表的内容,字段的相关约束
出口条件:成功在结果显示栏显示数据库内的表的内容,字段的相关约束
3、&&& 更新数据库当前数据库或连接曾经连接过的数据库
用例名:更新数据库
入口条件:已经连接并树状管理器成功初始化
事件流:用户选择当前数据库的下拉列表中的数据库名,系统重新连接数据库,在结果显示栏显示数据库内的表的内容,字段的相关约束
出口条件:成功在结果显示栏显示数据库内的表的内容,字段的相关约束
4、&&& 创建数据库
用例名:创建、删除数据库
入口条件:已经连接并树状管理器成功初始化
事件流:用户单击创建数据库按钮,系统弹出创建数据库界面,用户输入数据库名,系统创建数据库,并执行更新数据库操作或SQL操作
出口条件: 成功创建数据库。
异常事件:数据库创建失败;数据库已经存在;数据库名中有未识别的字符;SQL语法错误
5、&&& 创建表
用例名:创建数据库
入口条件:已经连接并树状管理器成功初始化
事件流:用户单击创建表按钮,系统弹出创建表界面,用户输入表名,单击新建字段,系统弹出新建字段界面,输入参数,单击完成字段,单击输入记录,系统弹出输入记录界面,单击完成记录,单击完成表的创建,系统创建表,并执行更新数据库操作或SQL操作。
出口条件: 成功创建表。
异常事件:表创建失败;表已经存在;表名中有未识别的字符;表中的参数异常;输入字段类型异常;SQL语法错误。
6、&&& 删除数据库
用例名:创建、删除数据库
入口条件:已经连接并树状管理器成功初始化
事件流:用户单击删除数据库按钮,系统弹出删除界面,用户从下拉列表中选择数据库名或SQL操作
出口条件:删除数据库成功
异常事件:数据库不存在;SQL语法错误
7、&&& 删除表
用例名:删除表
入口条件:已经连接并树状管理器成功初始化,选中所要删除的表
事件流:用户单击删除表按钮,系统弹出删除界面提示,确定后,系统删除相应的表或SQL操作
出口条件:删除表成功
异常事件:表未选中;SQL语法错误
8、&&& 新建文本区
用例名:新建文本区
入口条件:已经连接并树状管理器成功初始化
事件流:用户单击新建文本按钮,系统弹出界面提示是否保存先前界面,若保存,则执行保存指令,否,则系统将文本区置空。
出口条件:出现新文本区
9、&&& 配置软件
用例名:软件基本配置
入口条件:系统启动
事件流:用户单击软件配置按钮,系统弹出配置界面若保存,系统执行相应配置。
出口条件:系统根据配置成功变化
10、&& 执行SQL语言功能
用例名:执行SQL
入口条件:已经连接并树状管理器成功初始化
事件流:用户在文本输入合法的SQL语句,点击更新、查询按钮,系统执行相应操作
出口条件:成功执行SQL语言
异常事件:SQL语法错误异常事件:SQL语法错误
第四章 系统设计
第一节 建立对象模型
通过对系统的分析,得出的类图。
对于每一个类的具体描述如表1.
表 1.主要类的描述
connection
ConnectData&
合法性检验,连接数据库
ConnectMysql&
重新连接当前数据库
数据库树图管理器初始化
QueryTable&
显示查询后的表格
SummitQuery&
执行SQL查询语言
SummitUpdate
执行SQL更新语言
主类,初始化主界面
MyTreeCellRenderer
定义初始化树的节点
editorAppInterface
保存当前编辑区
自定义出错显示
定义界面状态
定义全局变量
guiAppInterface
AddDataApp&
创建数据库
DeleteApp&
登录连接数据库
第二节 建立动态模型
在系统设计过程中,对系统主要的功能建立时序图。
一、连接数据库
连接远程或本地MySQL数据库时序图如图6.
(1) 用户打开系统或单击连接数据库按钮
(2) 系统弹出连接数据库界面
(3) 用户输入IP、port、数据库名、用户名、密码,点击确定
(4) 系统进行合格性检验,连接相应数据库
(5) 系统将当前数据库下拉列表显示数据库名,
(6) 数据库管理树状列表根节点初始化
(7) 数据库管理树状列表其他节点初始化
(8) 状态栏显示连接成功
二、创建表
创建表的时序图如图.
(1) 用户单击创建表按钮
(2) 系统弹出创建表界面
(3) 用户输入表名
(4) 单击新建字段
(5) 系统弹出新建字段界面
(6) 用户输入参数,单击完成字段
(7) 用户单击输入记录
(8) 系统弹出输入记录界面
(9) 用户输入记录,单击完成
(10)系统执行SQL语言进行表的创建
(11)系统更新数据库树状管理器
三、菜单设计
菜单实现系统的主要功能,设计如表 2.。
表 2. 菜单设计
弹出连接数据库界面
新建文本编辑区
保存文本编辑区
弹出另存为界面
打开SQL文档
新建数据库
删除数据库
调用SummitQuery
调用SummitUpdate
包资源管理器
弹出配置界面
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:50820次
排名:千里之外
转载:166篇
(1)(5)(1)(18)(42)(41)(62)Java 动态web项目,ssh框架开发的,以前是使用Oracle数据库开发的,现在要改为Mysql的数据,但是现在只有_百度知道
Java 动态web项目,ssh框架开发的,以前是使用Oracle数据库开发的,现在要改为Mysql的数据,但是现在只有
Mysql根据映射文件自动生成数据库文件
提问者采纳
有映射文件就好办了。你首先把驱动改成mysql的。再将映射文件中有关id的配置修改一下。因为oracle和别的数据库不一样。配置id是都是这样的。&id name=&id& type=&java.lang.Long&&
&column name=&ID& precision=&12& scale=&0& /&
&generator class=&sequence& &
&param name=&sequence&&SEQ_APE_ASSET_INJESTION_CTR&/param&
&/generator&
&/id&其他数据库是没有&param name=&sequence&&SEQ_APE_ASSET_INJESTION_CTR&/param&的。同时你可以修改hibernate配置文件hibernate.hbm2ddl.auto=update这样的话启动tomcat并部署后会自动生成数据库表(前提要建立数据库哟)
我就是这样的,但是已经把param的sequence去了,并且在generator添加了Native属性了,但是还是不自动生成,hibernate的hbm2ddl.auto也是update的,我现在就想问问,你是mysql的安装配置或者什么应不影响自动建表啊?我还想过可不可以用Myeclipse反向生成?
提问者评价
谢谢你帮我大忙了
其他类似问题
ssh框架的相关知识
按默认排序
其他1条回答
数据连接池
您可能关注的推广回答者:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁posts - 32,&
comments - 140,&
trackbacks - 0
  近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机  应用程序已从传统的桌面应用转到Web应用。基于B/S(Browser/Server)架构的3层开发模式逐渐取代C/S(Client/Server)架构的开发模式,成为开发企业级应用和电子商务普遍采用的技术。在Web应用开发的早期,主要使用的技术是﹑﹑等。之后,Sun公司推出了基于语言的Servlet+Jsp+JavaBean技术。相比传统的开发技术,它具有跨平台﹑﹑有效﹑可移植等特性,这使其更便于使用和开发。  Java应用程序访问的基本原理  在Java语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁,  即Java语言通过JDBC技术访问数据库。JDBC是一种“开放”的方案,它为数据库应用开发人员﹑数据库前台工具开发人员提供了一种标准的应用程序接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。JDBC提供两种API,分别是面向开发人员的API和面向底层的JDBC驱动程序API,底层主要通过直接的JDBC驱动和JDBC-ODBC桥驱动实现与数据库的连接。  一般来说,Java应用程序访问数据库的过程(如图1所示)是:  ①装载数据库驱动程序;  ②通过JDBC建立数据库连接;  ③访问数据库,执行SQL语句;  ④断开数据库连接。图1 Java数据库访问机制  JDBC作为一种数据库访问技术,具有简单易用的优点。但使用这种模式进行Web应用  程序开发,存在很多问题:首先,每一次Web请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都得花费0.05s~1s的时间,而且系统还要分配内存资源。这个时间对于一次或几次数据库操作,或许感觉不出系统有多大的开销。可是对于现在的Web应用,尤其是大型电子商务,同时有几百人甚至几千人在线是很正常的事。在这种情况下,频繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重的甚至会造成服务器的崩溃。不是危言耸听,这就是制约某些电子商务网站发展的技术瓶颈问题。其次,对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库。还有,这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。   数据库连接池(connection pool)的工作原理  1、基本概念及原理由上面的分析可以看出,问题的根源就在于对连接资源的低效管理。我们知道,
  对于共享资源,有一个很著名的模式:资源池(Resource Pool)。该模式正是为了解决资源的频繁分配﹑释放所造成的问题。为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。连接池的基本工作原理见下图2。图2 连接池的基本工作原理  2、服务器自带的连接池  JDBC的API中没有提供连接池的方法。一些大型的WEB应用服务器如BEA的WebLogic和IBM的WebSphere等提供了连接池的机制,但是必须有其第三方的专用类方法支持连接池的用法。  连接池关键问题分析  1、并发问题  为了使连接管理服务具有最大的通用性,必须考虑多线程环境,即并发问题。这个问题相对比较好解决,因为语言自身提供了对并发管理的支持,使用synchronized关键字即可确保线程是同步的。使用方法为直接在类方法前面加上synchronized关键字,如:public synchronized Connection getConnection()   2、多数据库服务器和多用户  对于大型的企业级应用,常常需要同时连接不同的数据库(如连接和)。如何连接不同的数据库呢?我们采用的策略是:设计一个符合单例模式的连接池管理类,在连接池管理类的唯一实例被创建时读取一个资源文件,其中资源文件中存放着多个数据库的url地址(&poolName.url&)﹑用户名(&poolName.user&)﹑密码(&poolName.password&)等信息。如tx.url=192.168.1.123:5000/tx_it,tx.user=cyl,tx.password=123456。根据资源文件提供的信息,创建多个连接池类的实例,每一个实例都是一个特定数据库的连接池。连接池管理类实例为每个连接池实例取一个名字,通过不同的名字来管理不同的连接池。  对于同一个数据库有多个用户使用不同的名称和密码访问的情况,也可以通过资源文件处理,即在资源文件中设置多个具有相同url地址,但具有不同用户名和密码的数据库连接信息。  3、事务处理  我们知道,事务具有原子性,此时要求对数据库的操作符合“ALL-ALL-NOTHING”原则,即对于一组SQL语句要么全做,要么全不做。在语言中,Connection类本身提供了对事务的支持,可以通过设置Connection的AutoCommit属性为false,然后显式的调用commit或rollback方法来实现。但要高效的进行Connection复用,就必须提供相应的事务支持机制。可采用每一个事务独占一个连接来实现,这种方法可以大大降低事务管理的复杂性。
  4、连接池的分配与释放  连接池的分配与释放,对系统的性能有很大的影响。合理的分配与释放,可以提高连接的复用度,从而降低建立新连接的开销,同时还可以加快用户的访问速度。  对于连接的管理可使用空闲池。即把已经创建但尚未分配出去的连接按创建时间存放到一个空闲池中。每当用户请求一个连接时,系统首先检查空闲池内有没有空闲连接。如果有就把建立时间最长(通过容器的顺序存放实现)的那个连接分配给他(实际是先做连接是否有效的判断,如果可用就分配给用户,如不可用就把这个连接从空闲池删掉,重新检测空闲池是否还有连接);如果没有则检查当前所开连接池是否达到连接池所允许的最大连接数(maxConn),如果没有达到,就新建一个连接,如果已经达到,就等待一定的时间(timeout)。如果在等待的时间内有连接被释放出来就可以把这个连接分配给等待的用户,如果等待时间超过预定时间timeout,则返回空值(null)。系统对已经分配出去正在使用的连接只做计数,当使用完后再返还给空闲池。对于空闲连接的状态,可开辟专门的线程定时检测,这样会花费一定的系统开销,但可以保证较快的响应速度。也可采取不开辟专门线程,只是在分配前检测的方法。  5、连接池的配置与维护  连接池中到底应该放置多少连接,才能使系统的性能最佳?系统可采取设置最小连接数(minConn)和最大连接数(maxConn)来控制连接池中的连接。最小连接数是系统启动时连接池所创建的连接数。如果创建过多,则系统启动就慢,但创建后系统的响应速度会很快;如果创建过少,则系统启动的很快,响应起来却慢。这样,可以在开发时,设置较小的最小连接数,开发起来会快,而在系统实际使用时设置较大的,因为这样对访问客户来说速度会快些。最大连接数是连接池中允许连接的最大数目,具体设置多少,要看系统的访问量,可通过反复测试,找到最佳点。  如何确保连接池中的最小连接数呢?有动态和静态两种策略。动态即每隔一定时间就对连接池进行检测,如果发现连接数量小于最小连接数,则补充相应数量的新连接,以保证连接池的正常运转。静态是发现空闲连接不够时再去检查。连接池的实现
  1、连接池模型  本文讨论的连接池包括一个连接池类(DBConnectionPool)和一个连接池管理类(DBConnetionPoolManager)和一个配置文件操作类(ParseDSConfig)。连接池类是对某一所有连接的“缓冲池”,主要实现以下功能:①从连接池获取或创建可用连接;②使用完毕之后,把连接返还给连接池;③在系统关闭前,断开所有连接并释放连接占用的系统资源;④还能够处理无效连接(原来登记为可用的连接,由于某种原因不再可用,如超时,通讯问题),并能够限制连接池中的连接总数不低于某个预定值和不超过某个预定值。(5)当多数据库时,且数据库是动态增加的话,将会加到配置文件中。  连接池管理类是连接池类的外覆类(wrapper),符合单例模式,即系统中只能有一个连接池管理类的实例。其主要用于对多个连接池对象的管理,具有以下功能:①装载并注册特定数据库的JDBC驱动程序;②根据属性文件给定的信息,创建连接池对象;③为方便管理多个连接池对象,为每一个连接池对象取一个名字,实现连接池名字与其实例之间的映射;④跟踪客户使用连接情况,以便需要是关闭连接释放资源。连接池管理类的引入主要是为了方便对多个连接池的使用和管理,如系统需要连接不同的数据库,或连接相同的数据库但由于性问题,需要不同的用户使用不同的名称和密码。
2、连接池实现(经过本人改版,可以适用多数据库类型的应用以及一种数据库类型多个数据库且数据
库的数量可以动态增加的应用程序)
1),DBConnectionPool.java
数据库连接池类
2),DBConnectionManager .java
数据库管理类
3),DSConfigBean .java
单个数据库连接信息Bean
4),ParseDSConfig.java
操作多(这个'多'包括不同的数据库和同一种数据库有多个数据库)
数据 配置文件xml
5),ds.config.xml
数据库配置文件xml
原代码如下:
DBConnectionPool.java
----------------------------------------------------------
/** * 数据库连接池类 */import java.sql.Cimport java.sql.DriverMimport java.sql.SQLEimport java.util.ArrayLimport java.util.Iimport java.util.T/** * @author chenyanlin * */public class DBConnectionPool implements TimerListener { private Connection con= private int inUsed=0;
//使用的连接数 private ArrayList freeConnections = new ArrayList();//容器,空闲连接 private int minC
//最小连接数 private int maxC
//最大连接 private S
//连接池名字 private S //密码 private S
//数据库连接地址 private S
//驱动 private S
//用户名 public T
//定时 /**
*/ public DBConnectionPool() {
// TODO Auto-generated constructor stub } /**
* 创建连接池
* @param driver
* @param name
* @param URL
* @param user
* @param password
* @param maxConn
*/ public DBConnectionPool(String name, String driver,String URL, String user, String password, int maxConn) {
this.name=
this.driver=
this.url=URL;
this.user=
this.password=
this.maxConn=maxC } /**
* 用完,释放连接
* @param con
*/ public synchronized void freeConnection(Connection con)
this.freeConnections.add(con);//添加到空闲连接的末尾
this.inUsed--; } /**
根据timeout得到连接
* @param timeout
* @return
*/ public synchronized Connection getConnection(long timeout) {
Connection con=
if(this.freeConnections.size()&0)
con=(Connection)this.freeConnections.get(0);
if(con==null)con=getConnection(timeout); //继续获得连接
con=newConnection(); //新建连接
if(this.maxConn==0||this.maxConn&this.inUsed)
con=//达到最大连接数,暂时不能获得连接了。
if(con!=null)
this.inUsed++;
* 从连接池里得到连接
* @return
*/ public synchronized Connection getConnection() {
Connection con=
if(this.freeConnections.size()&0)
con=(Connection)this.freeConnections.get(0);
this.freeConnections.remove(0);//如果连接分配出去了,就从空闲连接里删除
if(con==null)con=getConnection(); //继续获得连接
con=newConnection(); //新建连接
if(this.maxConn==0||this.maxConn&this.inUsed)
con=//等待 超过最大连接时
if(con!=null)
this.inUsed++;
System.out.println("得到 "+this.name+" 的连接,现有"+inUsed+"个连接在使用!");
*释放全部连接
*/ public synchronized void release() {
Iterator allConns=this.freeConnections.iterator();
while(allConns.hasNext())
Connection con=(Connection)allConns.next();
con.close();
catch(SQLException e)
e.printStackTrace();
this.freeConnections.clear();
* 创建新连接
* @return
*/ private Connection newConnection() {
Class.forName(driver);
con=DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("sorry can't find db driver!");
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
System.out.println("sorry can't create Connection!");
* 定时处理函数
*/ public synchronized void TimerEvent()
//暂时还没有实现以后会加上的 } /**
* @param args
*/ public static void main(String[] args) {
// TODO Auto-generated method stub } /**
* @return the driver
*/ public String getDriver() { } /**
* @param driver the driver to set
*/ public void setDriver(String driver) {
this.driver = } /**
* @return the maxConn
*/ public int getMaxConn() {
return maxC } /**
* @param maxConn the maxConn to set
*/ public void setMaxConn(int maxConn) {
this.maxConn = maxC } /**
* @return the minConn
*/ public int getMinConn() {
return minC } /**
* @param minConn the minConn to set
*/ public void setMinConn(int minConn) {
this.minConn = minC } /**
* @return the name
*/ public String getName() { } /**
* @param name the name to set
*/ public void setName(String name) {
this.name = } /**
* @return the password
*/ public String getPassword() { } /**
* @param password the password to set
*/ public void setPassword(String password) {
this.password = } /**
* @return the url
*/ public String getUrl() { } /**
* @param url the url to set
*/ public void setUrl(String url) {
this.url = } /**
* @return the user
*/ public String getUser() { } /**
* @param user the user to set
*/ public void setUser(String user) {
this.user = }}------------------------------------------- DBConnectionManager .java------------------------------------------/** * 数据库连接池管理类 */import java.sql.Cimport java.util.ArrayLimport java.util.Eimport java.util.HashMimport java.util.Himport java.util.Iimport java.util.Pimport java.util.V/** * @author chenyanlin * */public class DBConnectionManager { static private DBConnectionM//唯一数据库连接池管理实例类 static
//客户连接数 private Vector drivers
= new Vector();//驱动信息 private Hashtable pools=new Hashtable();//连接池
* 实例化管理类
*/ public DBConnectionManager() {
// TODO Auto-generated constructor stub
this.init(); } /**
* 得到唯一实例管理类
* @return
*/ static synchronized public DBConnectionManager getInstance() {
if(instance==null)
instance=new DBConnectionManager();
* 释放连接
* @param name
* @param con
*/ public void freeConnection(String name, Connection con) {
DBConnectionPool pool=(DBConnectionPool)pools.get(name);//根据关键名字得到连接池
if(pool!=null)
pool.freeConnection(con);//释放连接
* 得到一个连接根据连接池的名字name
* @param name
* @return
*/ public Connection getConnection(String name) {
DBConnectionPool pool=
Connection con=
pool=(DBConnectionPool)pools.get(name);//从名字中获取连接池
con=pool.getConnection();//从选定的连接池中获得连接
if(con!=null)
System.out.println("得到连接。。。"); } /**
* 得到一个连接,根据连接池的名字和等待时间
* @param name
* @param time
* @return
*/ public Connection getConnection(String name, long timeout) {
DBConnectionPool pool=
Connection con=
pool=(DBConnectionPool)pools.get(name);//从名字中获取连接池
con=pool.getConnection(timeout);//从选定的连接池中获得连接
System.out.println("得到连接。。。"); } /**
* 释放所有连接
*/ public synchronized void release() {
Enumeration allpools=pools.elements();
while(allpools.hasMoreElements())
DBConnectionPool pool=(DBConnectionPool)allpools.nextElement();
if(pool!=null)pool.release();
pools.clear(); } /**
* 创建连接池
* @param props
*/ private void createPools(DSConfigBean dsb) {
DBConnectionPool dbpool=new DBConnectionPool();
dbpool.setName(dsb.getName());
dbpool.setDriver(dsb.getDriver());
dbpool.setUrl(dsb.getUrl());
dbpool.setUser(dsb.getUsername());
dbpool.setPassword(dsb.getPassword());
dbpool.setMaxConn(dsb.getMaxconn());
System.out.println("ioio:"+dsb.getMaxconn());
pools.put(dsb.getName(), dbpool); } /**
* 初始化连接池的参数
*/ private void init() {
//加载驱动程序
this.loadDrivers();
//创建连接池
Iterator alldriver=drivers.iterator();
while(alldriver.hasNext())
this.createPools((DSConfigBean)alldriver.next());
System.out.println("创建连接池。。。");
System.out.println("创建连接池完毕。。。"); } /**
* 加载驱动程序
* @param props
*/ private void loadDrivers() {
ParseDSConfig pd=new ParseDSConfig(); //读取数据库配置文件
drivers=pd.readConfigInfo("ds.config.xml");
System.out.println("加载驱动程序。。。"); } /**
* @param args
*/ public static void main(String[] args) {
// TODO Auto-generated method stub }}----------------------------------------DSConfigBean.java----------------------------------------/** * 配置文件Bean类 *//** * @author chenyanlin * */public class DSConfigBean { private String type
=""; //数据库类型 private String name
=""; //连接池名字 private String driver
=""; //数据库驱动 private String url
=""; //数据库url private String username =""; //用户名 private String password =""; //密码 private int maxconn
=0; //最大连接数 /**
*/ public DSConfigBean() {
// TODO Auto-generated constructor stub } /**
* @param args
*/ public static void main(String[] args) {
// TODO Auto-generated method stub } /**
* @return the driver
*/ public String getDriver() { } /**
* @param driver the driver to set
*/ public void setDriver(String driver) {
this.driver = } /**
* @return the maxconn
*/ public int getMaxconn() { } /**
* @param maxconn the maxconn to set
*/ public void setMaxconn(int maxconn) {
this.maxconn = } /**
* @return the name
*/ public String getName() { } /**
* @param name the name to set
*/ public void setName(String name) {
this.name = } /**
* @return the password
*/ public String getPassword() { } /**
* @param password the password to set
*/ public void setPassword(String password) {
this.password = } /**
* @return the type
*/ public String getType() { } /**
* @param type the type to set
*/ public void setType(String type) {
this.type = } /**
* @return the url
*/ public String getUrl() { } /**
* @param url the url to set
*/ public void setUrl(String url) {
this.url = } /**
* @return the username
*/ public String getUsername() { } /**
* @param username the username to set
*/ public void setUsername(String username) {
this.username = }}-----------------------------------------------------ParseDSConfig.java-----------------------------------------------------/** * 操作配置文件类 读
写 修改 删除等操作
*/import java.io.FileInputSimport java.io.FileNotFoundEimport java.io.FileOutputSimport java.io.IOEimport java.io.InputSimport java.util.Limport java.util.Vimport java.util.Iimport org.jdom.Dimport org.jdom.Eimport org.jdom.JDOMEimport org.jdom.input.SAXBimport org.jdom.output.Fimport org.jdom.output.XMLO/** * @author chenyanlin * */public class ParseDSConfig { /**
* 构造函数
*/ public ParseDSConfig() {
// TODO Auto-generated constructor stub } /**
* 读取xml配置文件
* @param path
* @return
*/ public Vector readConfigInfo(String path) {
String rpath=this.getClass().getResource("").getPath().substring(1)+
Vector dsConfig=
FileInputStream fi =
fi=new FileInputStream(rpath);//读取路径文件
dsConfig=new Vector();
SAXBuilder sb=new SAXBuilder();
Document doc=sb.build(fi);
Element root=doc.getRootElement();
List pools=root.getChildren();
Element pool=
Iterator allPool=pools.iterator();
while(allPool.hasNext())
pool=(Element)allPool.next();
DSConfigBean dscBean=new DSConfigBean();
dscBean.setType(pool.getChild("type").getText());
dscBean.setName(pool.getChild("name").getText());
System.out.println(dscBean.getName());
dscBean.setDriver(pool.getChild("driver").getText());
dscBean.setUrl(pool.getChild("url").getText());
dscBean.setUsername(pool.getChild("username").getText());
dscBean.setPassword(pool.getChild("password").getText());
dscBean.setMaxconn(Integer.parseInt(pool.getChild("maxconn").getText()));
dsConfig.add(dscBean);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
fi.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return dsC }/** *修改配置文件 没时间写 过段时间再贴上去 其实一样的
*/ public void modifyConfigInfo(String path,DSConfigBean dsb) throws Exception {
String rpath=this.getClass().getResource("").getPath().substring(1)+
FileInputStream fi= //读出
FileOutputStream fo= //写入
}/** *增加配置文件 * */ public void addConfigInfo(String path,DSConfigBean dsb)
String rpath=this.getClass().getResource("").getPath().substring(1)+
FileInputStream fi=
FileOutputStream fo=
fi=new FileInputStream(rpath);//读取xml流
SAXBuilder sb=new SAXBuilder();
Document doc=sb.build(fi); //得到xml
Element root=doc.getRootElement();
List pools=root.getChildren();//得到xml子树
Element newpool=new Element("pool"); //创建新连接池
Element pooltype=new Element("type"); //设置连接池类型
pooltype.setText(dsb.getType());
newpool.addContent(pooltype);
Element poolname=new Element("name");//设置连接池名字
poolname.setText(dsb.getName());
newpool.addContent(poolname);
Element pooldriver=new Element("driver"); //设置连接池驱动
pooldriver.addContent(dsb.getDriver());
newpool.addContent(pooldriver);
Element poolurl=new Element("url");//设置连接池url
poolurl.setText(dsb.getUrl());
newpool.addContent(poolurl);
Element poolusername=new Element("username");//设置连接池用户名
poolusername.setText(dsb.getUsername());
newpool.addContent(poolusername);
Element poolpassword=new Element("password");//设置连接池密码
poolpassword.setText(dsb.getPassword());
newpool.addContent(poolpassword);
Element poolmaxconn=new Element("maxconn");//设置连接池最大连接
poolmaxconn.setText(String.valueOf(dsb.getMaxconn()));
newpool.addContent(poolmaxconn);
pools.add(newpool);//将child添加到root
Format format = Format.getPrettyFormat();
format.setIndent("");
format.setEncoding("utf-8");
XMLOutputter outp = new XMLOutputter(format);
fo = new FileOutputStream(rpath);
outp.output(doc, fo);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
*删除配置文件
*/ public void delConfigInfo(String path,String name) {
String rpath=this.getClass().getResource("").getPath().substring(1)+
FileInputStream fi =
FileOutputStream fo=
fi=new FileInputStream(rpath);//读取路径文件
SAXBuilder sb=new SAXBuilder();
Document doc=sb.build(fi);
Element root=doc.getRootElement();
List pools=root.getChildren();
Element pool=
Iterator allPool=pools.iterator();
while(allPool.hasNext())
pool=(Element)allPool.next();
if(pool.getChild("name").getText().equals(name))
pools.remove(pool);
Format format = Format.getPrettyFormat();
format.setIndent("");
format.setEncoding("utf-8");
XMLOutputter outp = new XMLOutputter(format);
fo = new FileOutputStream(rpath);
outp.output(doc, fo);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
fi.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
* @param args
* @throws Exception
*/ public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
ParseDSConfig pd=new ParseDSConfig();
String path="ds.config.xml";
pd.readConfigInfo(path);
//pd.delConfigInfo(path, "tj012006");
DSConfigBean dsb=new DSConfigBean();
dsb.setType("oracle");
dsb.setName("yyy004");
dsb.setDriver("org.oracle.jdbc");
dsb.setUrl("jdbc:oracle://localhost");
dsb.setUsername("sa");
dsb.setPassword("");
dsb.setMaxconn(1000);
pd.addConfigInfo(path, dsb);
pd.delConfigInfo(path, "yyy001"); }}--------------------------------------ds.config.xml
配置文件--------------------------------------&ds-config&&pool&&type&mysql&/type&&name&user&/name&&driver&com.mysql.jdbc.driver&/driver&&url&jdbc:mysql://localhost:3306/user&/url&&username&sa&/username&&password&123456&/password&&maxconn&100&/maxconn&&/pool&&pool&&type&mysql&/type&&name&user2&/name&&driver&com.mysql.jdbc.driver&/driver&&url&jdbc:mysql://localhost:3306/user2&/url&&username&sa&/username&&password&1234&/password&&maxconn&10&/maxconn&&/pool&&pool&&type&sql2000&/type&&name&books&/name&&driver&com.microsoft.sqlserver.driver&/driver&&url&jdbc:sqlserver://localhost:1433/books:databasename=books&/url&&username&sa&/username&&password&&/password&&maxconn&100&/maxconn&&/pool&&/ds-config&3. 连接池的使用
1。Connection的获得和释放
DBConnectionManager
connectionMan=DBConnectionManager .getInstance();//得到唯一实例
//得到连接
String name="mysql";//从上下文得到你要访问的数据库的名字
Connection
con=connectionMan.getConnection(name);
。。。。。。。
// 使用完毕 connectionMan.freeConnection(name,con);//释放,但并未断开连接 2。数据库连接的动态增加和连接池的动态增加
1。调用xml操作增加类
2。重新实例华连接池管理池类
阅读(70263)
&re: Java jdbc数据库连接池总结!
没看出这个timeout有什么用处,没有实现超时机制。另外,DBConnectionPool.getConnection(long timeout)的实现中,明显需要先判断是否超过最大连接数,然后再new 新的connection,否则一旦超出,先前刚刚创建的新连接根本没有释放就返回null了。&&&&&&
&re: Java jdbc数据库连接池总结!
很不错,谢谢分享在“事务处理”那里的“ALL-ALL-NOTHING”原则 应为“ALL-OR_NOTHING”&&&&&&
&re: Java jdbc数据库连接池总结!
老大,TimerListener 类哪???&&&&&&
&re: Java jdbc数据库连接池总结!
大哥,能否给我一份,不胜感激,谢谢了
longen_516&#
QQ:8779870&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
兄弟,发我一份完整的吧,谢谢!!!
jingjiong&#&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
谢谢大大!好好学习!能否给我一份完整的!谢谢大大了!!
liuyingxiao&#&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
老大给我传份完整版的吧谢谢了!!!!
liuyingxiao&#
还有就是public class DBConnectionPool implements TimerListener
其中TimerListener要+什么包还是要实现这个方法&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
老大给我传份完整版的吧谢谢了!!!!
liuyingxiao&#&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
老大给我传份完整版的吧谢谢了!!!!
liuyingxiao&#&&&&&&
&re: Java jdbc数据库连接池总结!
麻烦把这个文档呵程序包发给我一份。小弟最近正在学做一个小网站,被数据库整得头都大了。幸好搜到了您的这篇文档。十分感激。
caigzh04&#&&&&&&
&re: Java jdbc数据库连接池总结!
你好~看了你的总结
有些地方不完整看不大明白~
我也希望能得到你完整的数据库连接池的Java代码~
小弟多谢了~
邮箱:yangkj2006&#&&&&&&
&re: Java jdbc数据库连接池总结!
谢谢,给份完整的代码!
zyw8136&#&&&&&&
&re: Java jdbc数据库连接池总结!
请也给我一份完整的代码,谢谢!
fenggui.gu&#&&&&&&
&re: Java jdbc数据库连接池总结!
不错兄弟,能发一份完成的代码吗?万分感谢!!
zhang_0308&#&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
兄弟,能给我发一份完整的代码吗?谢谢!!aimdlau&#&&&&&&
&re: Java jdbc数据库连接池总结!
谢谢chunkyo,只是有些地方看得不懂,比如说那个TimerListner接口是自己写的还是哪个第三方提供的类等,所以希望能得到完整的代码!hsbljyy&#.cn&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
测试了几次都没通过,能否发个完整版的给我?
beijihu3&#&&&&&&
&re: Java jdbc数据库连接池总结!
我也是调了好长时间也没调通,能否发个完整的给我
qsge2005&#&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
TimerListener没理解,能发给我个完整的么,谢谢!lidongge123&#QQ: 加qq时请注明理由,谢谢&&&&&&
&re: Java jdbc数据库连接池总结!
能不能给我一个完整版的阿,谢谢
maming134&#&&&&&&
&re: Java jdbc数据库连接池总结!
也发一份给我吧,先谢过了...
acon_cl&#&&&&&&
&re: Java jdbc数据库连接池总结!
liguiquan8&#.cn&&&&&&
&re: Java jdbc数据库连接池总结!
也给我一份学习了 谢谢 liguiquan8&#.cn&&&&&&
&re: Java jdbc数据库连接池总结!
谢谢楼上分享, 但调了很长时间没有调通,恳请搂主发一份完整代码,谢谢!
email:hxiaosu&#&&&&&&
&re: Java jdbc数据库连接池总结!
感觉不错,需要一份源码 谢谢
aty03&#&&&&&&
&re: Java jdbc数据库连接池总结!
能否发份源码给我。谢谢。&&&&&&
&re: Java jdbc数据库连接池总结!
能否发份源码给我。谢谢。
xa_yangfan&#.cn&&&&&&
&re: Java jdbc数据库连接池总结!
感觉不错,需要一份源码 谢谢
youranxj&#
&re: Java jdbc数据库连接池总结!
我正在学习连接池的东西,请问能也给我发一份完整代码吗
谢谢了! carlchou825&#.cn&&&&&&
&re: Java jdbc数据库连接池总结!
也给我发一份好么?谢谢~~~~~~~~~
xyzhang0010&#&&&&&&
&re: Java jdbc数据库连接池总结!
现在才看到,源码还有么!
发我一份
gaofeirong&#
非常感谢&&&&&&
&re: Java jdbc数据库连接池总结!
感觉很好,能否给一份完整的源码,非常感谢!!
&re: Java jdbc数据库连接池总结!
感觉很好,能否给一份完整的源码,非常感谢!! qianjiang520&#
&&&&&&
&re: Java jdbc数据库连接池总结!
写的太好了,正需要,麻烦给发一份完整的源码,多谢多谢!
邮箱:datang_flying&#&&&&&&
&re: Java jdbc数据库连接池总结!
兄台写得太棒了 !可否给小弟学习学习
zhangxinwe999&#&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
写的真好,受教了,不过确实不太完整,能否转送一份源码,小弟不胜感谢!james4837&#&&&&&&
&re: Java jdbc数据库连接池总结!
阿道夫&&&&&&
&re: Java jdbc数据库连接池总结!
看的不是很懂,希望大哥能给我一份完整版的,让我好好研究一下。
xue_qiwei&#.cn
非常崇拜!&&&&&&
&re: Java jdbc数据库连接池总结!
good~~~&&&&&&
&re: Java jdbc数据库连接池总结!
TimerListener没理解,能发给我个完整的么,谢谢!
luo_qing&#
QQ: 加qq时请注明理由,谢谢 &&&&&&
&re: Java jdbc数据库连接池总结!
TimerListener是不是第三方包,能否转送一份源码,不胜感谢!
janklan&#&&&&&&
&re: Java jdbc数据库连接池总结!
建议:楼猪的思路是面向过程的。建议去研究AOP,好好看一下JDK的java.lang.reflect.InvocationHandler和Proxy
良好的用户体验是这样的:
Connection conn = Pool.getConn();
// doSomething
conn.close();
// 不改变用户习惯,用户close也行放回空闲池
如何实现?很简单:
public Object invoke(...) {
if (!method.getName().equals(&close&)) return method.invoke(...);
// push back
强烈建议楼猪好好学习设计模式,否则会阻碍你发展的。&&&&&&
&re: Java jdbc数据库连接池总结!
能否也给我一份儿
mwgjkf&#
谢谢&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
能给我一份吗,
yachaofeng&#&&&&&&
&re: Java jdbc数据库连接池总结!
能否也给我一份儿
sxpujs&#&&&&&&
&re: Java jdbc数据库连接池总结!
谢谢您的分享,非常实用,也是我非常需要的现在,传给我一份吧。3Q!
zhangxiangyang.bupt&#&&&&&&
&re: Java jdbc数据库连接池总结!
第二次在笔试时碰到这问题。
给我也发一份我好好研究研究。
bing.huang8419&#&&&&&&
&re: Java jdbc数据库连接池总结!
写得很不错!!,可惜我调不出来,能发份完整的代码不?谢谢了
fly533&#&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
非常好,很实用,测试一下没有通过,能否传给我一份!
chinaxwn&#&&&&&&
&re: Java jdbc数据库连接池总结!
我自己写的那个没有分的这么细的,只是从dataSource中取得一个只读连接和写连接的。能否传我一份的!zhaoweiwei-2006&#&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
正在学习,希望传份详细的
谢谢了!
artwhy&#&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
我也刚开始学习连接池希望传我一份谢谢先!fl&#&&&&&&
&re: Java jdbc数据库连接池总结!
能否发我一份!
bluesky.mo&#&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
给一份完整的谢谢楼主
happy_javaboy&#&&&&&&
&re: Java jdbc数据库连接池总结!
能否发我一份! sjxlsn&# 谢谢了&&&&&&
&re: Java jdbc数据库连接池总结!
TimerListener
这是做什么用的,我看到很多人都在问。楼主你好, 我现在也在找连接池,麻烦你发一份给我,不胜感激。bisubisu&#&&&&&&
&re: Java jdbc数据库连接池总结!
能否传我一份啊,ddf168913&#,谢谢&&&&&&
&re: Java jdbc数据库连接池总结!
非常棒的资料,虽然内容不是很完全,不过完全实现了数据库连接池的核心,仔细理解以后,我抽取出了自己想要的代码,可以使用,十分感谢&&&&&&
&re: Java jdbc数据库连接池总结!
TimerListener 这是做什么用的,我看到很多人都在问。楼主你好, 我现在也在找连接池,麻烦你发一份给我,不胜感激。wanhition&#&&&&&&
&re: Java jdbc数据库连接池总结!
我想了解一下,可以用 WORD 文档 发一下这些代码给我吗?jiajia10161&#
唔该&&&&&&
&re: Java jdbc数据库连接池总结!
希望楼主也给我发一份完整的:包括源码和JAR包!谢谢
xu.yubao&#&&&&&&
&re: Java jdbc数据库连接池总结!
麻烦发一份到我邮箱
&# 最好带上测试代码&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
给我也发一份完整的吧 TimerListener不太明白是怎么回事
&#给我发一份完整的代码
谢谢&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
@Li
是啊,我也找不到这个接口&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
@油炸大龙虾
高手就是高手,向你学习&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
在程序中你后面留着的几个问题,有没有完整版本?有的话,麻烦给我一份。谢谢&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
谢谢你也给我一份完整的代码
急需!!&#&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
自己动手 成为 风衣祖师~!&&&&&&
&re: Java jdbc数据库连接池总结!
大哥,有没有完整的代码,给一份,谢谢,QQ:&&&&&&
&re: Java jdbc数据库连接池总结!
正在学习,能不能也发份完整代码给我,谢谢,dahuzij&# &&&&&&
&re: Java jdbc数据库连接池总结!
jdbc 连接池能给我份完整的源码吗,现在着急使用,谢谢,liuqinglong88&#&&&&&&
&re: Java jdbc数据库连接池总结!
jdbc 连接池能给我份完整的源码吗,现在着急使用,谢谢,servcelayer163&#&&&&&&
&re: Java jdbc数据库连接池总结!
你好!能不能麻烦发份完整版源码,急用下,谢谢 &#&&&&&&
&re: Java jdbc数据库连接池总结!
遇到第一个问题就是TimerListener,我本地建立的新类继承不了timerlistener,import java.util.T我也引入了&&&&&&
&re: Java jdbc数据库连接池总结!
我是发现了timer 是打酱油的啊???&&&&&&
&re: Java jdbc数据库连接池总结!
麻烦也给我一份吧,邮箱:&#,先感谢楼主!&&&&&&
&re: Java jdbc数据库连接池总结!
麻烦也给我一份吧,邮箱:&#,先感谢楼主!&&&&&&
&感谢楼主,鄙视要源码的
首先感谢楼主的精心整理,虽然是07年的,但对我帮助很大,同时也说一下要源码的,别人整理出来就不容易,如果几百个都去要人家还做事吗,自己多去调试整理&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
感谢楼主,虽然是07年的,不过正好新项目要用到连接池。不知能否发一份源码给我? 邮箱:&#
万分感谢&&&&&&
&re: Java jdbc数据库连接池总结!
求一份源码,谢谢、邮箱 &#&&&&&&
&re: Java jdbc数据库连接池总结!
感谢楼主分享,希望能给一份源码,邮箱&#&&&&&&
&re: Java jdbc数据库连接池总结!
看了你的博客,希望得到一份源码!谢谢了,邮箱&# &&&&&&
&re: Java jdbc数据库连接池总结!
看了你的博客,让我了解了更多,最近我正在学习连接池,能不能得到你的一份源代码呀……非常感谢……邮箱:ljj_0729&#&&&&&&
&re: Java jdbc数据库连接池总结!
那个所谓单列写的有问题。&&&&&&
&re: Java jdbc数据库连接池总结!
@静JING你要到源码了吗?给发一份呗!!!还有这个数据库连接池是在哪里实现创建多个连接的?&&&&&&
&re: Java jdbc数据库连接池总结!
@感谢楼主你好 我想要问一下这个数据库连接池是在哪里实现创建多个连接的?这个你知道是怎么实现的吗?&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
感觉楼主的单例模式 好像是错的&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
哪有这样实现单例类的?&&&&&&
&re: Java jdbc数据库连接池总结!
楼主,给我也发一份吧,正在学习中,突然发现自己的项目中急需数据库连接池,写的有点多,发一份完整的代码吧,不胜感激
邮箱:&#&&&&&&
&re: Java jdbc数据库连接池总结!
正在研究数据库连接池,楼主好人一生平安,只求一份源码,&#&&&&&&
&re: Java jdbc数据库连接池总结!
楼主能发份给我吗?谢谢&#&&&&&&
&re: Java jdbc数据库连接池总结!
测试成功&&&&&&
&re: Java jdbc数据库连接池总结!
信不信多线程并发情况下,会出现连接无法归还?取连接和还连接的同步不合理。&&&&&&
&re: Java jdbc数据库连接池总结!
楼主发份原码,谢谢
gtt509109&#&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
能不能发份完整的资料到我邮箱,感激不尽&#&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
能不能也发一份完整的代码给我,多谢楼主
&#&&&&&&
&re: Java jdbc数据库连接池总结!
能发我一份完整的代码给我啊,感谢楼主&&&&&&
&re: Java jdbc数据库连接池总结!
我按照你的方法进行配置,但是最后一打开数据连接就自动关闭,这是什么原因啊!&&&&&&
&re: Java jdbc数据库连接池总结!
真心不错,现在正在做服务器这块,数据库连接池 问题 ,无从下手,现在 了解很多,谢谢了。&&&&&&
&re: Java jdbc数据库连接池总结![未登录]
刚好需要封装一个数据库连接池,楼主大哥给我发一份完整的,多谢hhm.617&#&&&&&&
31123456789101114172022232425272829303112345678910
这个博客主要是关于java技术和开源技术,大家一起来进步了!
留言簿(10)
Java技术网站
http://www.liferay.net
/sysdesign/
Linux VS Unix
其他常去网站
中国最大最专业的水工行业电子商务平台,水工行业门户网站!
常光顾的BLOG
文学类网站
游戏类网站
积分与排名
阅读排行榜
评论排行榜

我要回帖

更多关于 oracle导出数据库 的文章

 

随机推荐