1、基于JAVA的虚拟股票交易系统的研究与实现摘 要:所谓股票交易,就是指股票投资者之间按照市场价格对已发行上市的股票所进行的买卖。近年来,国内股票市 场发展十分迅速,催生出了诸如上海证券交易所和深圳证券交易所等国内知名的股票交易中心,同时也吸引了越来越多的股票 热爱者。当然,问题也接踵而来,由于国内股票市场刚刚 起步,缺少 统一而且全面的交易平台,导致许多人对于股票的认识还很匮乏。本着为大众服务的宗旨,基于 JAVA的虚拟股票交易系统就是为了解决上述问题而进行开发的。该系统严格按照软件工程中面向 对象的开发方法和开 发流程,采用Struts+Hibernate+JSP技术和MySQL数据库进行设
2、计、开发并实现。用户通过注册、登 录到该系统后,可以浏览、学习自己感兴趣的股票信息和股票知识 ,查看个人股票持仓,进行股票交易,修改个人资料等等。该系统内容丰富、安全可靠、操作简单,能够充分满足绝大多数股票爱好者的需求。关键词:虚拟股票交易系统;JAVA;面向对象;Hibernate;MySQL数据库Abstract:The stock exchange, means the stock investors in accordance with the market price between the stock market has been issued to the trade. in
3、recent years, the domestic stock market developed rapidly, tides out such as shanghai and shenzhen stock exchanges, the famous stock exchange centre, also attracted more and more stocks love. of course, there are a lot of question, the domestic stock market has just begun, a lack of unity and full t
4、ransaction platform, Lead to many people to share knowledge is a very short.Applied for the purposes of the public based on java virtual stock trading system is in order to solve the problem for development. the system in software engineering object-oriented development and the development process.
5、the struts hibernate jsp technology and mysql database on a design, development and implementation. the user through a registered and logged on to the system, you can browse, study interests stock information and knowledge, View the individual stocks, On the stock exchange, Changes to personal data,
6、 and so on.The system are rich in content, safe, easy operation, Able to fully satisfy the demand of the lovers.Key words:Virtual stock trading system; JAVA; Object-oriented; Hibernate; Mysql database目录1 前 言 42 系统说明 42.1 虚拟股票交易系统的功能 42.2 系统开发背景及意义 42.3 系统开发技术 52.4 系统开发工具及环境 52.5 系统开发方式 62.6 可行性分析 63
7、 系统分析 63.1 系统结构 63.2 系统描述 73.2.1 总述 73.2.2 分述 73.3 总体功能模块 83.3.1 总体功能模块 83.3.2 用户登录流程 93.4 系统用例模型 93.4.1 活动者识别 93.4.2 用例识别 93.4.3 用例图 93.4.4 用例描述 104 系统设计 124.1 功能模块细化 124.1.1 我的首页(系统首页)模块 124.1.2 股票交易模块 124.1.3 个人信息修改模块 124.2 数据库设计 134.2.1 E-R 图的设计 .134.2.2 数据表 144.3 系统类设计 154.3.1 Util 工具类的设计 .154.
8、3.2 业务逻辑层的类设计 214.3.3 视图层的设计 255 系统实现 255.1 开发环境 255.2 数据表设计与实现 255.3 数据库连接字符串 276 系统运行和测试 276.1 系统首页 276.2 用户注册 306.3 用户登录 316.4 我的持仓 326.5 交易明细 376.6 账户信息 387 结论 407.1 系统的优缺点 407.1.1 优点 407.1.2 缺点 407.2 改进方案 40结束语 40谢辞 40参考文献 411 前 言随着各种网络技术的逐步成熟,网上交易系统由原来单一的 EXE 程序开始转向综合的WEB 技术,开始采用更先进的、开放的技术和标准以
9、实现系统的开放性和可扩展性。但是随着用户访问量的急剧增加和网络吞吐量的限制,加之对网络安全的更高要求,现存的网上交易系统的开发面临着重大挑战:一方面,网上交易系统面对的是一个异构的分布式环境,它必须支持与已有系统的集成性和与其他系统的互操作性;另一方面,作为客户、合作伙伴和企业内部提供信息服务的平台,企业系统还必须具有高可用性、安全性、可靠性和可伸缩性。这些要求再加上复杂多变的用户需求和不断伸缩的交付时间,使得网上交易系统的开发越来越困难。Java 技术的出现,尤其是 J2EE(Java 2 Platform Enterprise Edition)平台的推出正使得网上交易系统的开发由此变得更加
10、快速和方便。我国的股票交易市场还处在发展阶段,作为网上交易系统之一的虚拟股票交易系统的开发也刚刚起步。作为一名计算机专业的本科生,我希望能够用我大学期间所学知识来设计一套虚拟股票交易系统,为广大喜爱股票的朋友提供一个虚拟的股票交易平台,帮助大家了解更多的股票信息、学习更多的股票知识。在这里,本文仅对该虚拟股票交易系统的设计和开发进行介绍。2 系统说明2.1 虚拟股票交易系统的功能根据各大网站收集的网民的需求和本人对股票交易的一些认识进行全面的分析,该虚拟股票交易系统只向用户开放前台操作一种方式,提供简单、友好的用户界面,以保证用户体验的便捷性。用户在注册该系统之后,只需输入自己的用户名和密码,
11、即可登录到该系统进行股票信息查询、股票买入、股票卖出、交易明细查询、个人信息修改等操作。当然,考虑到内容不可避免的局限性,该系统还提供了丰富翔实的股票、财经链接,以方便用户( 游客也可以)进行浏览和学习。虚拟股票交易系统的以上功能是通过一系列的 JSP 网页与 MySQL 数据库动态交互来实现的。系统设计的主要工作在于系统数据库的设计,Struts、Hibernate 框架的构建和 JSP 页面的布局。2.2 系统开发背景及意义随着信息化社会的快速推进和网上交易系统在我国的不断普及与推广,特别是股票市场近些年来的蓬勃发展,再加上各种网络技术的逐步成熟,使得股票实现网上交易的趋势日趋明显。如果能
12、够实现网上股票交易,网上交易的便捷性和安全性无非会给整个股票市场提供强大的推动力。这不仅可以拓宽股票市场的渠道,吸引更多的人来接触和认识股票;而且也会对整个产业链产生积极、深远的影响。在这种大环境下,虚拟股票交易系统的设计和开发也必然会为整个股票市场贡献出自己的一份微薄之力。2.3 系统开发技术J2EE 全称是 JAVA 2 平台企业版(JAVA 2 Platform Enterprise Edition),它是由美国SUN 公司 (已于 2009 年被美国甲骨文公司收购)提出的最新 JAVA 标准。利用 J2EE 技术,公司企业能够建立完全符合自己商业逻辑的服务架构,从而以最短的相应时间、最
13、低的投入,为最大范围的客户、雇员及供货商提供最方便的服务,而且这些服务是高质量、安全和可扩展的。J2EE 技术的基础就是核心 Java 平台或 Java 2 平台的标准版,J2EE 不仅巩固了 JAVA 标准版中的许多优点,例如“编写一次、随处运行 ”的特性、方便存取数据库的JDBC API、CORBA 技术以及能够在 Intemet 应用中保护数据的安全模式等等,同 时 还 提供 了 对 EJB(Enterprise JavaBeans)、 Java Servlets API、 JSP(Java Server Pages)以 及XML 技 术 的 全 面 支 持 。 J2EE 体系结构提供中
14、间层集成框架用来满足无需太多费用而又需要高可用性、高可靠性以及可扩展性的应用的需求。通过提供统一的开发平台,J2EE 降低了开发多层应用的费用和复杂性,同时提供对现有应用程序集成强有力支持,完全支持Enterprise JavaBeans,有良好的向导支持打包和部署应用,添加目录支持,增强了安全机制,提高了性能。J2EE 使用多层的分布式应用模型,应用逻辑按功能划分为组件,各个应用组件根据他们所在的层分布在不同的机器上。事实上,SUN 设计 J2EE 的初衷正是为了解决两层模式 CS(Client Server)的弊端,在传统模式中,客户端担当了过多的角色而显得臃肿,在这种模式中,第一次部署的
15、时候比较容易,但难于升级或改进,可伸展性也不理想,而且经常基于某种专有的协议,通常是某种数据库协议。它使得重用业务逻辑和界面逻辑非常困难。而网上交易系统却恰恰要求应用程序有很高的可扩展性、组件有可重用性以及系统有很强的安全性等。Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate 可以应用在任何使用 JDBC 的场合,既可以在 Java 的客户端程序使用,也可以在 Servlet/JSP的 Web 应用中使用,最具革命意义的是,Hibernate 可以在应用 E
16、JB 的 J2EE 架构中取代CMP,完成数据持久化的重任。Struts 最早是作为 Apache Jakarta 项目的组成部分,项目的创立者希望通过对该项目的研究、改进和提高 JavaServer Pages、Servlet、标签库以及面向对象的技术水准。它的目的是为了帮助我们减少在运用 MVC 设计模型来开发 Web 应用的时间。如果想混合使用Servlet 和 JSP 的优点来建立可扩展的应用,Struts 是一个不错的选择。2.4 系统开发工具及环境此次要开发的虚拟股票交易系统是一个在 Internet 网络环境下运行的系统,因此我采用的技术有 Struts+Hibernate+JS
17、P,开发工具为 MyEclipse、应用服务器 Tomcat、数据库MySQL。MyEclipse 企业级工作平台(MyEclipse Enterprise Workbench,简称 MyEclipse)是对Eclipse IDE 的扩展,利用它我们可以在数据库和 JavaEE 的开发、发布,以及应用程序服务器的整合方面极大地提高工作效率。它是功能丰富的 JavaEE 集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML、 Struts、JSF、CSS 、 Javascript、SQL、Hibernate。Tomcat 是 Apache 软件基金会(Apache Softwa
18、re Foundation)的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。Tomcat 是一个轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP程序的首选。实际上 Tomcat 部分是 Apache 服务器的扩展,但它是独立运行的,所以当你运行 tomcat 时,它实际上作为一个与 Apache 独立的进程单独运行的。MySQL 是一个小型关系型数据库管理系统,开发者为瑞典 MySQL AB 公司。在 2008年 1 月 16 号被 Sun 公司收购,而 2009 年,SUN 又被 Oracle
19、收购。目前 MySQL 被广泛地应用在 Internet 上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了 MySQL 作为网站数据库。2.5 系统开发方式本课题是 B/S (Browser/Server)即浏览器和服务器结构的软件项目,采用了MVC(Model View Controller)模式进行设计。其中,Model 层实现系统中的业务逻辑,用JavaBean(实体类 )来实现;View 层用于与用户的交互,用 JSP 来实现;Controller 层是Model 与 View 之间沟通的桥梁,它可以分派用户
20、的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作,用 Struts 来实现。2.6 可行性分析鉴于对目前股票交易市场的分析和观测,加上对网上类似系统相关资料的整理和总结,本人所开发的这套虚拟股票交易系统是在大量的基础上完成的。在当前的条件下,该系统的所有功能基本上能够满足用户的需求。由于本人在大学期间有过对 JAVA 技术的学习,而且在公司实习阶段一直在做 J2EE 方面的开发,对这项技术也有了一定的掌握程度,所以在开发该系统的过程中还是比较顺利的。3 系统分析3.1 系统结构系统结构是系统的最高层概念。在开发虚拟股票交易系统的实例之前,应该先选择或
21、定义好一个合适的系统结构。该系统主要采用 MVC 三层模式,分别是模型(Model)层、视图(View)层和控制(Controller)层。结构模型如图 3.1 所示:图 3.1 MVC 三层模式模型(Model)层实现系统中的业务逻辑。在 MVC 的三个部件中,模型 (Model)层拥有最多的处理任务。封装的是数据源和所有基于对这些数据的操作。JavaBean 分为业务类和数据实体,业务类处理业务数据、数据实体承载数据,基本上大多数的项目都是使用这种MVC 的实现模式。在一个组件中,Model 往往表示组件的状态和操作状态的方法,如处理请求执行业务逻辑、访问数据库、封装数据等等。封装的数据和
22、行为必须是独立于任何的表现,提高可重复性,可以独立的测试,不要包含任何的 Servlet 和 JSP 的 API。视图(View)层用于与用户的交互,封装的是对数据源 Model 的一种显示。一个模型可以由多个视图,而一个视图理论上也可以和不同的模型关联起来,通常用 JSP 来实现。JSP(Java Server Pages)是由 Sun Microsystems 公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP 技术有点类似 ASP 技术,它是在传统的网页 HTML 文件(*.htm,*.html)中插入 Java 程序段(Scriptlet)和 JSP 标记(tag),从而形成
23、 JSP 文件(*.jsp)。用 JSP 开发的Web 应用是跨平台的,既能在 Linux 下运行,也能在其他操作系统上运行。控制(Controller)层封装的是外界作用于模型的操作。通常,这些操作会转发到模型上,并调用模型中相应的一个或者多个方法。一般 Controller 在 Model 和 View 之间起到了沟通的作用,处理用户在 View 上的输入,并转发给 Model。这样 Model 和 View 两者之间可以做到松散耦合,甚至可以彼此不知道对方,而由 Controller 连接起这两个部分。3.2 系统描述系统描述初步界定了系统的范围和功能。为了有一个更加清晰的开发思路,现用
24、自然语言对整个虚拟股票交易系统进行详细地描述。3.2.1 总述该虚拟股票交易系统主要有我的首页、我的持仓、交易明细、账户信息、用户注册、用户登录、安全退出和股票搜索八大功能模块。用户在注册该系统之后,只需输入自己的用户名和密码,即可登录到该系统进行股票信息查询、股票买入、股票卖出、交易明细查询、个人信息修改等操作。除此之外,该系统还提供了丰富翔实的股票、财经链接,以方便用户( 游客也可以)进行浏览和学习。3.2.2 分述接下来,本人将对上述功能模块进行详细的描述。1、我的首页:亦即系统首页,任何游客或者是已经进行注册了的用户都可以浏览。在我的首页中囊括了丰富翔实、精彩纷呈的网页内容。其中有颇具
25、人性化的网站欢迎标语,随着时间和用户的不同会发生细微的变化;优美精致的网站 Logo,简洁大方的搜索栏,贴心实用的天气预报,当然肯定少不了丰富多彩的网站链接,包括站内的图文资讯和热门TAG,还有站外的新浪财经、股票之家和股票入门等等。2、用户注册:浏览了如此精彩的首页,如果你想驻足,享受更多、更精彩的体验的话,你可以马上点击“用户注册”链接,进入用户注册页面进行注册。当然你必须遵循一定的规则才能顺利完成注册,比如为了确保账户安全、有效,页面上的六个输入框用户名、密码、重复密码、邮箱、手机号码和联系地址都必须正确地填写,否则你有可能无法完成注册。3、用户登录:如果你已经顺利完成了注册,那么系统将
26、会自动跳转到“用户登录”页面,你可以马上尝试登录。这里只需要正确地输入你的用户名和密码,就可以成功地查看到你的股票持仓、股票交易明细和个人信息,这个时候,你将有权对这些模块进行相关操作。4、我的持仓:用户在成功登录到该系统后,将可以对此模块进行操作。在此模块中,用户可以查看到自己股票持有信息、价格信息,还可以进行相应的股票交易。5、交易明细:用户在成功登录到该系统后,可以到交易明细模块查看自己的股票交易即股票代码、股票名称、股票价格、股票数量、交易类型和交易时间的具体情况。6、账户信息:用户在成功登录到该系统后,同样也可以进入账户信息模块,查看和修改自己的个人信息,其中包括用户姓名、登录密码、
27、邮箱、手机号码、联系地址和注册日期,但注册日期是不允许修改的。用户修改后,点击表单下面的“确定”按钮,即可完成个人信息的修改,然后页面会跳转到登录页面,要求用户重新进行登录。7、股票搜索:为了增加用户的体验,方便用户查询自己感兴趣的股票信息,在系统的每一个页面都设置了同样的搜索栏。无论用户正在浏览哪个页面,只要在搜索栏中输入你想要查询的股票代码,就可以轻松快捷地搜索到所需要的股票信息和相关的持仓信息。而且这项功能同样也对非用户的游客进行开放,但游客并不能得到相关的股票持仓信息。8、安全退出:如果用户完成相关体验后,想要退出该系统,可以点击“安全退出”按钮,页面会自动跳转到登录界面。在不重新登录
28、的情况下,用户跟普通游客一样,不能浏览我的持仓、交易明细等页面。3.3 总体功能模块该虚拟股票交易系统,主要是为了满足用户对股票交易的体验,要求操作简单快捷、界面整洁大方,因此必须要设计一个好的程序架构和运作流程。从上述系统描述中可以大致了解到整个虚拟股票交易系统的总体功能模块划分及流程图概况。如图 3.3.1-3.3.2 所示。3.3.1 总体功能模块图 3.3.1 总体功能模块3.3.2 用户登录流程图 3.3.2 用户登录流程3.4 系统用例模型用例模型是整个系统开发过程中的起点,并驱动建模的全过程。用例模型包括系统的用例图及用例描述。在设计系统用例模型之前,首先要识别活动者和用例。3.
29、4.1 活动者识别活动者是系统分析员与用户交流的起点,也是项目获得后续产品的关键。通常,活动者是指使用系统功能的人,也可以是其他外部的系统,包括软件系统和硬件设备。总之,凡是与系统进行信息交换的外部事物,都可以被称为系统的活动者。从上述系统描述中可以得知,在系统顶层只可以识别出 1 个活动者:普通用户。3.4.2 用例识别用例是面向目标的,它代表的是系统将要做什么,而不是系统将怎么做。它相当于一个容器,一个满足系统各种交互的容器,我们可以从事件中识别用例。同样从上述系统描述中可以得知,系统层主要有如下用例:1、用户登录,2、查看股票持仓信息,3、进行股票交易,4、查看交易明细,5、查看和修改个
30、人信息,6、搜索股票信息,7、安全退出。3.4.3 用例图系统层用例如图 3.4.3 所示:图 3.4.3 系统层用例图3.4.4 用例描述系统实例识别出的 7 个用例中,安全退出用例非常简单,在这里就不作分析了。下面仅对剩下的 6 个用例用户登录、查看股票持仓信息、进行股票交易、查看交易明细、查看和修改个人信息和搜索股票信息用例进行描述。1、用户登录用例用例名称 用户登录用例目标 当用户登录系统时用例开始。它处理用户登录问题。当完成登录时用例结束级别 子功能活动者 用户状态 只定义了初始路径前件条件 无成功后件 用户成功登录到本系统主路径 用户进入登录界面以后,输入正确的用户名和密码,登录系
31、统可选路径 用户进入登录界面后,放弃登录例外路径 用户进入登录界面后,输入了无效的用户名或密码,系统显示出错信息。用户可以选择返回登录界面,重新输入正确的信息或取消2、查看股票持仓信息用例用例名称 查看股票持仓信息用例目标 当用户登录系统,跳转到“我的持仓”界面时用例开始。它查询用户的股票持仓信息。完成处理以后用例结束级别 子功能活动者 用户状态 只定义了初始路径前件条件 用户必须先登录系统成功后件 用户成功登录后进入“我的持仓”界面主路经 用户进入登录界面,输入正确的用户名和密码,进入“我的持仓”界面可选路径 无例外路径 无3、进行股票交易用例用例名称 进行股票交易用例目标 当用户登录系统,
32、跳转到“我的持仓”界面时用例开始。它进行股票交易。完成处理以后用例结束级别 子功能活动者 用户状态 只定义了初始路径前件条件 用户必须先登录系统成功后件 用户成功登录后进入“我的持仓”界面主路经 用户进入登录界面,输入正确的用户名和密码,进入“我的持仓”界面可选路径 用户登录后,在搜索栏中输入相应的关键字,搜索到所需股票,进行交易例外路径 无4、查看交易明细用例用例名称 查看交易明细用例目标 当用户登录到系统,点击“交易明细”链接进入“交易明细”界面时用例开始。它进行交易明细查询。完成处理以后用例结束级别 子功能活动者 用户状态 只定义了初始路径前件条件 用户必须先登录系统成功后件 用户成功登
33、录后进入“交易明细”界面主路经 用户进入登录界面,输入正确的用户名和密码,点击进入“交易明细”界面可选路径 无例外路径 无5、查看和修改个人信息用例用例名称 查看和修改个人信息用例目标 当用户登录到系统,点击“账户信息”链接进入“账户信息”界面时用例开始。它进行用户个人信息的查看和修改。完成处理以后用例结束级别 子功能活动者 用户状态 只定义了初始路径前件条件 用户必须先登录系统成功后件 用户成功登录后进入“账户信息”界面主路经 用户进入登录界面,输入正确的用户名和密码,点击进入“账户信息”界面可选路径 无例外路径 无6、搜索股票信息用例用例名称 搜索股票信息用例目标 当用户在搜索栏中输入关键
34、字时用例开始。它进行股票的搜索。完成处理以后用例结束级别 子功能活动者 用户状态 只定义了初始路径前件条件 无成功后件 用户在搜索栏中输入关键字后,系统返回“搜索结果”界面主路经 用户进入登录界面,输入正确的用户名和密码,成功登录系统后,即可使用该功能可选路径 无例外路径 无4 系统设计4.1 功能模块细化由上述的系统分析用例模型可以得出系统的细化功能模块。4.1.1 我的首页(系统首页)模块图 4.1.1 我的首页模块功能细化4.1.2 股票交易模块图 4.1.2 股票交易模块功能细化4.1.3 个人信息修改模块图 4.1.3 个人信息修改模块功能细化4.2 数据库设计4.2.1 E-R 图
35、的设计E-R 图又称实体-联系图(Entity-Relation Diagram)用来建立数据模型,在数据库系统概论中属于概念设计阶段,形成一个独立于机器,独立于 DBMS 的 E-R 图模型。E-R 图提供了表示实体(即数据对象) 、属性和联系的方法,用来描述现实世界的概念模型。由系统实体类模型可以映射到数据库从而得出 E-R 图。如图 4.2.1 所示。mnm nmm股票 ID股票代码 股票名称股票价格股票类型 ID类型信息交易类型用户 ID姓名密码手机号码邮箱联系地址注册日期用户持仓 ID股票 ID股票数量平均价格用户 ID股票持仓交易 ID股票 ID交易价格 交易数量 交易日期类型 I
36、D用户 ID交易记录交易查询图 4.2.1 E-R 图4.2.2 数据表数据表由类映射得出。整个系统建立了一个数据库 vsts,五个数据表:股票表 Stock、交易类型表 TradeType、用户表 User、股票持仓表 Holding、交易记录表 Trade。各数据表的具体情况如下所示。1、 股票表 Stock字段名 类型、初始值 说明stock_id Int primary key 自动增长name varchar(32) 股票名称code varchar(32) 股票代码price double 股票价格表 4.2.2-1 股票表 Stock2、 交易类型表 TradeType字段名 类
37、型、初始值 说明TradeType_id int primary key 自动增长info varchar(32) 类型信息表 4.2.2-2 交易类型表 TradeType3、 用户表 User字段名 类型、初始值 说明user_id int primary key 自动增长name varchar(32) unique 姓名passwd varchar(12) 密码email varchar(32) 邮箱phone varchar(16) 手机号码address varchar(256) 联系地址reg_date date 注册日期表 4.2.2-3 用户表 User4、 股票持仓表 Ho
38、lding字段名 类型、初始值 说明holding_id int primary key 自动增长stock_id int 股票 idnumber int 股票数量avgPrice double 股票平均价格user_id int 用户 id表 4.2.2-4 股票持仓表 Holding5、 交易记录表 Trade字段名 类型、初始值 说明trade_id int primary key 自动增长stock_id int 股票 idtradePrice double 交易价格tradeNumber int 交易数量tradeDate date 交易日期tradetype_id int 交易类型
39、 iduser_id int 用户 id表 4.2.2-5 交易记录表 Trade4.3 系统类设计4.3.1 Util 工具类的设计该类主要负责数据库的操作,包括了与数据库的连接,对数据库进行增、删、改、查等操作。主要代码如下:1、 JDBC 连接工厂类 (ConnectionFactory)package ambow.vsts.util;/* author Magicc* date 2010-7-9* version mc1.0* description JDBC 连接工厂类 */import java.io.*;import java.sql.*;import java.util.Pro
40、perties;import javax.sql.*;import javax.naming.*;public class ConnectionFactory/* 数据库驱动类的名称 */private String driver = “;/* 数据库 URL */private String dbURL = “;/* 数据库用户名 */private String user = “;/* 当前用户密码 */private String password = “;/* 工厂实例 */private static ConnectionFactory factory = null;/* const
41、ructor* * 抛异常*/private ConnectionFactory() throws ExceptionInputStream in = this.getClass().getClassLoader().getResourceAsStream(“ambow/vsts/util/dbconfig.properties“);Properties prop = new Properties();tryprop.load(in); catch (IOException e)throw new IOException(“No dbconfig.properties defined erro
42、r“);driver = prop.getProperty(“driver“);dbURL = prop.getProperty(“url“);user = prop.getProperty(“user“);password = prop.getProperty(“password“);/* 返回数据库 URL*/public String getDbURL()return dbURL;/* 返回数据库驱动类名*/public String getDriver()return driver;/* 返回当前用户的密码*/public String getPassword()return pass
43、word;/* 返回数据库的用户名*/public String getUser()return user;/* 返回数据库连接*/public static Connection getConnection()Connection conn = null;if (factory = null)tryfactory = new ConnectionFactory(); catch (Exception e)System.out.println(e.getMessage();e.printStackTrace();return null;tryClass.forName(factory.getD
44、river();conn = DriverManager.getConnection(factory.getDbURL(), factory.getUser(), factory.getPassword(); catch (ClassNotFoundException e)System.out.println(“ No class “ + factory.getDriver() + “ found error“);e.printStackTrace(); catch (SQLException e)System.out.println(“Failed to get connection :“
45、+ e.getMessage();e.printStackTrace();return conn;/* 测试代码*/public static void main(String args) throws ExceptionConnection con = ConnectionFactory.getConnection();System.out.println(con);DatabaseUtil.closeObject(con);2、 关闭 JDBC 连接工具类(DatabaseUtil)package ambow.vsts.util;/* author Magicc* date 2010-7-
46、9* version mc1.0* description 关闭 JDBC 连接工具类 */import java.sql.Connection;import java.sql.Date;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class DatabaseUtil public static void closeObject(ResultSet rs, Statement stm, Connection con)closeObject(rs);closeObj
47、ect(stm, con);public static void closeObject(Statement stm, Connection con)closeObject(stm);closeObject(con);public static void closeObject(Connection con)tryif (con != null)con.close(); catch (Exception e)public static void closeObject(ResultSet rs)tryif (rs != null)rs.close(); catch (Exception e)p
48、ublic static void closeObject(Statement st)tryif (st != null)st.close(); catch (Exception e)public static long getNextId(Connection con, String sequence)Statement st = null;ResultSet rs = null;long nextId = 1;tryst = con.createStatement();rs = st.executeQuery(“SELECT “ + sequence + “.nextval as id F
49、ROM dual“);rs.next();nextId = rs.getLong(1); catch (Exception e)e.printStackTrace(); finallycloseObject(rs, st, null);return nextId;public static Date getCurrentDate(Connection con) throws SQLExceptionString strSQL = “ SELECT sysdate FROM dual“;Statement st = con.createStatement();ResultSet rs = st.executeQuery(strSQL);rs.next();Date dtRtn = rs.getDate(1);closeObject(rs, st, null);return dtRtn;public static void main(String args) th