Java程序设计基础教程第12章-综合实训-简易网上自助银行系统.ppt

上传人(卖家):三亚风情 文档编号:3372363 上传时间:2022-08-24 格式:PPT 页数:97 大小:5.32MB
下载 相关 举报
Java程序设计基础教程第12章-综合实训-简易网上自助银行系统.ppt_第1页
第1页 / 共97页
Java程序设计基础教程第12章-综合实训-简易网上自助银行系统.ppt_第2页
第2页 / 共97页
Java程序设计基础教程第12章-综合实训-简易网上自助银行系统.ppt_第3页
第3页 / 共97页
Java程序设计基础教程第12章-综合实训-简易网上自助银行系统.ppt_第4页
第4页 / 共97页
Java程序设计基础教程第12章-综合实训-简易网上自助银行系统.ppt_第5页
第5页 / 共97页
点击查看更多>>
资源描述

1、u刘刚刘刚 刘伟刘伟 编著编著 Java Java经典的应用场景是经典的应用场景是WebWeb应用程序开发,应用程序开发,JavaJava的的跨平台性使其在跨平台性使其在WebWeb应用程序开发方面占尽了优势,加应用程序开发方面占尽了优势,加上其语言的特性、丰富的上其语言的特性、丰富的APIAPI和扩展类库以及对众多脚和扩展类库以及对众多脚本语言的支持,虽然有本语言的支持,虽然有PHPPHP和和PythonPython等众多语言的加入,等众多语言的加入,JavaJava在该领域的龙头地位依然稳固。在该领域的龙头地位依然稳固。应用程序开发分为应用程序开发分为C/SC/S架构和架构和B/B/S S

2、架构,就是架构,就是ClientClient/ServerServer(客户端(客户端/服务器)和服务器)和Browser/ServerBrowser/Server(浏览器(浏览器/服服务器)架构,目前务器)架构,目前JavaJava主要项目集中在主要项目集中在B/SB/S应用方面应用方面。为了。为了学习如何开发学习如何开发B/SB/S架构的服务,读者需要了解一些架构的服务,读者需要了解一些JavaWebJavaWeb项目中主要的开发技术,包括数据库、日志系统、测试系统项目中主要的开发技术,包括数据库、日志系统、测试系统等一系列的知识。等一系列的知识。因篇幅原因,本章节只对一些必要的内容因篇幅

3、原因,本章节只对一些必要的内容进行概括性讲解,更加深入的内容,读者可以进行概括性讲解,更加深入的内容,读者可以查阅查阅JavaWebJavaWeb相关的书籍和网上资源进行学习相关的书籍和网上资源进行学习。12.1 JDBC12.1 JDBC WebWeb开发中不可避免地要进行数据的交互,如何管开发中不可避免地要进行数据的交互,如何管理和交互数据是理和交互数据是WebWeb开发的重点,为了方便数据的存储开发的重点,为了方便数据的存储和使用,数据库系统应运而生和使用,数据库系统应运而生。但是众多的数据库系统。但是众多的数据库系统因其设计的差异而在切换时对项目影响巨大,为了让开因其设计的差异而在切换

4、时对项目影响巨大,为了让开发者关注程序开发,发者关注程序开发,JavaJava在在19961996年提供了一套访问数据年提供了一套访问数据库的标准库的标准JavaJava类库,即类库,即JDBCJDBC。12.1.1 JDBC12.1.1 JDBC的概念的概念 JDBCJDBC全称是全称是JavaJava数据库连接(数据库连接(JavaJava Database Database ConnectivityConnectivity),它是一套用于执行),它是一套用于执行SQLSQL语句的语句的JavaJava APIAPI。通过该。通过该APIAPI,开发者可以快速连接到关系型数据,开发者可以快

5、速连接到关系型数据库,并使用库,并使用SQLSQL实现对数据库中数据的增、删、改、查实现对数据库中数据的增、删、改、查功能。功能。由于市场上数据库种类繁多,因各种原因需要切换由于市场上数据库种类繁多,因各种原因需要切换不同数据库或者根据需要使用不同的数据库来存储对应不同数据库或者根据需要使用不同的数据库来存储对应的数据,都会让开发者感到非常头疼,的数据,都会让开发者感到非常头疼,JavaJava提供的提供的JDBCJDBC改善了这种情况。改善了这种情况。JDBCJDBC要求各数据库厂商按照统要求各数据库厂商按照统一的规范提供数据库驱动,用户无需直接与底层数据进一的规范提供数据库驱动,用户无需直

6、接与底层数据进行交互,大大增强了代码的可移植性,如图行交互,大大增强了代码的可移植性,如图12-112-1所示。所示。图图12-1 Java JDBC模型示意图模型示意图 通过该模型,开发者只需要修改通过该模型,开发者只需要修改数据库的驱动连接就可以方便快捷地数据库的驱动连接就可以方便快捷地完成对数据的切换工作,而无须修改完成对数据的切换工作,而无须修改其他内容其他内容。JDBCJDBC让开发者无须关注数让开发者无须关注数据库类型,只需要关注程序的实现即据库类型,只需要关注程序的实现即可。可。12.1.2 JDBC12.1.2 JDBC通用通用APIAPI JDBC JDBC的的APIAPI主

7、要位于主要位于java.sqljava.sql包中,该包定义了一包中,该包定义了一系列访问数据库的接口和类,其中包含与数据库连接和系列访问数据库的接口和类,其中包含与数据库连接和数据库操作的一系列数据库操作的一系列JavaJava类和接口。类和接口。1 1DriverDriver接口接口 Driver Driver接口是所有接口是所有JDBCJDBC驱动程序必须实现的接口,驱动程序必须实现的接口,该接口专门给提供数据库厂商使用,在使用数据库时,该接口专门给提供数据库厂商使用,在使用数据库时,需要将对应的数据库驱动程序或其类库添加到项目的需要将对应的数据库驱动程序或其类库添加到项目的classp

8、athclasspath中。中。此处主要讲解此处主要讲解MySQLMySQL,所以在使用,所以在使用MySQLMySQL数据库时,首先需要导入数据库时,首先需要导入MySQLMySQL的驱动包的驱动包。导入导入MySQLMySQL的驱动包步骤如下的驱动包步骤如下。首先,在项目名称上单击鼠标右键,在弹出的快捷首先,在项目名称上单击鼠标右键,在弹出的快捷菜单中选择菜单中选择“BuildBuild PathPathConfigureConfigure Build path Build path”选选项,如图项,如图12-212-2所示,进入所示,进入JavaJava的的Build PathBuild

9、 Path页签,如图页签,如图12-312-3所示。所示。图图12-2 打开打开Build Path图图12-3 Java Build Path 在在LibrariesLibraries页签下,单击页签下,单击“AddAdd External External JARsJARs ”按钮,选择源代码中的按钮,选择源代码中的MySQLMySQL驱动包,如图驱动包,如图12-412-4所示。所示。图图12-4 选择选择MySQL驱动包驱动包 然后按然后按“OKOK”键确定即可,如图键确定即可,如图12-512-5所示。所示。图图12-5 加入加入MySQL的驱动的驱动Jar包包2 2DriverMa

10、nagerDriverManager类类 DriverManagerDriverManager类用于加载类用于加载JDBCJDBC驱动并创建与驱动并创建与数据库的连接数据库的连接。该类有两个静态方法,一个是该类有两个静态方法,一个是regiseterDriverregiseterDriver(Driver driver)(Driver driver)方法,用于向方法,用于向DriverManagerDriverManager中注册给定的中注册给定的JDBCJDBC驱动程序,另一驱动程序,另一个是个是getConnectiongetConnection(String (String urlurl

11、,String user,String user,String String pwdpwd)方法,用于用户建立和数据库的连接,方法,用于用户建立和数据库的连接,并返回一个并返回一个ConnectionConnection对象对象。运行结果如图运行结果如图12-612-6所示。所示。图图12-6 运行结果运行结果 厂商不同,驱动程序也不同,如果想要使用厂商不同,驱动程序也不同,如果想要使用OracleOracle数据库,就需要下载对应的驱动数据库,就需要下载对应的驱动JarJar包包。OracleOracle的数据的数据库连接的库连接的urlurl是:是:jdbc:oracle:thin:loc

12、alhostjdbc:oracle:thin:localhost:1521:orcl1521:orcl。其中,其中,localhostlocalhost是是ipip地址,地址,orclorcl是实例是实例名称名称。同同MySQLMySQL不同的是,不同的是,OracleOracle默认的实例名称是默认的实例名称是orclorcl,读者要注意这一点,读者要注意这一点。另外,与数据库的连接对象是会占用系统资源的,另外,与数据库的连接对象是会占用系统资源的,该连接需要手动关闭,所以,每次使用的时候一定要在该连接需要手动关闭,所以,每次使用的时候一定要在finallyfinally语句中将该连接关闭语

13、句中将该连接关闭!3 3ConnectionConnection接口接口 ConnectionConnection接口代表着接口代表着JavaJava程序对数据库的连接,程序对数据库的连接,该对象负责对数据库的访问和操作该对象负责对数据库的访问和操作。通过该对象,你可通过该对象,你可以根据自己的需求进行数据库的对应操作以根据自己的需求进行数据库的对应操作。ConnectionConnection对象可以创建一个对象可以创建一个StatementStatement对象对象(createStatementcreateStatement()())、)、PreparedStatementPrepare

14、dStatement对象对象(prepareStatementprepareStatement()())和和CallableStatementCallableStatement对象对象(prepareCallprepareCall()()),),这些对象分别用于将一个这些对象分别用于将一个sqlsql语语句、一个参数化的句、一个参数化的sqlsql语句和一个存储过程放到数据库语句和一个存储过程放到数据库服务器上执行服务器上执行。4 4StatementStatement接口接口 StatementStatement接口用于执行静态的接口用于执行静态的sqlsql语句,并返回一个处语句,并返回一

15、个处理结果理结果。该对象通过该对象通过ConnectionConnection对象的对象的createStatementcreateStatement()()方法获取方法获取。该语句有该语句有3 3个主要的方法:个主要的方法:execute(String execute(String sqlsql)、executeUpdateexecuteUpdate(String(String sqlsql)和和executeQueryexecuteQuery(String(String sqlsql)。execute(String execute(String sqlsql)用于执行任何用于执行任何sql

16、sql,其返回值,其返回值是一个是一个booleanboolean类型的对象,如果该值为类型的对象,如果该值为truetrue,表明有查询,表明有查询结果,可以通过结果,可以通过StatementStatement的的getResultSet()getResultSet()方法获取查询方法获取查询结果结果。executeUpdateexecuteUpdate(String(String sqlsql)方法用于执行方法用于执行INSERTINSERT(插入)、(插入)、UPDATEUPDATE(更新)和(更新)和DELETEDELETE(删除)语句,该方(删除)语句,该方法返回一个法返回一个in

17、tint类型的值,用于反映受该语句影响的记录数。类型的值,用于反映受该语句影响的记录数。executeQueryexecuteQuery(String(String sqlsql)方法用于执行方法用于执行sqlsql语句中的语句中的SELECTSELECT(查询)语句,该语句返回一个(查询)语句,该语句返回一个ResultSetResultSet对象对象。运行结果如图运行结果如图12-712-7所示。所示。图图12-7 运行结果运行结果 为了验证表是否创建成功并且成功插入数据,在为了验证表是否创建成功并且成功插入数据,在workbenchworkbench中的中的usersusers表进行查询

18、,如图表进行查询,如图12-812-8所示。所示。通过通过workBenchworkBench可以看到,可以看到,usersusers表已经成功地创表已经成功地创建了,并且也成功地插入了数据建了,并且也成功地插入了数据。图图12-8 workbench 查询数据查询数据5 5PreparedStatementPreparedStatement接口和接口和ResultSetResultSet接口接口 PreparedStatementPreparedStatement接口是接口是StatementStatement接口的扩展接口的扩展接口接口。因为在实际的开发过程中,很多的查询条件都是因为在实际

19、的开发过程中,很多的查询条件都是通过变量进行的,这样使用通过变量进行的,这样使用StatementStatement就比较烦琐就比较烦琐。而。而且,如果通过且,如果通过StatementStatement语句直接组装语句直接组装sqlsql语句,可能会语句,可能会产生产生sqlsql注入等安全问题,注入等安全问题,PreparedStatementPreparedStatement接口完接口完美地规避了这些问题。美地规避了这些问题。PreparedStatementPreparedStatement是是StatementStatement的子接口,用于的子接口,用于执行预编译的执行预编译的sq

20、lsql语句语句。该语句扩展了带有参数的该语句扩展了带有参数的sqlsql语语句的执行操作,使用句的执行操作,使用“?”占位符来表示此处需要一个占位符来表示此处需要一个参数,并通过参数,并通过setXxxsetXxx()()方法进行参数赋值方法进行参数赋值。值得注意的值得注意的是,是,PreparedStatementPreparedStatement支持批处理操作支持批处理操作。ResultSet ResultSet接口用于保存接口用于保存JDBCJDBC执行查询时返回的结执行查询时返回的结果集,该结果集封装在一个逻辑表格中,果集,该结果集封装在一个逻辑表格中,ResultSetResult

21、Set使使用一个游标进行数据的获取,该游标默认指向表格的第用一个游标进行数据的获取,该游标默认指向表格的第一行之前,调用一行之前,调用next()next()方法时会向下一行移动方法时会向下一行移动。next()next()方法有一个方法有一个booleanboolean类型的返回值,如果逻辑表格含有类型的返回值,如果逻辑表格含有下一行数据,则该方法返回下一行数据,则该方法返回truetrue,否则返回,否则返回falsefalse。通通常,数据使用常,数据使用whilewhile条件语句进行读取条件语句进行读取。ResultSetResultSet每一行中都有若干列,每一列使用每一行中都有若

22、干列,每一列使用getXxxgetXxx()()方法获取方法获取。如果值是字符串,则可以使用如果值是字符串,则可以使用getStringgetString(intint columnIndexcolumnIndex)或者或者getStringgetString(String(String columnNamecolumnName)两种两种方式获取,前者通过列在逻辑表格中的逻辑位置进行获取,方式获取,前者通过列在逻辑表格中的逻辑位置进行获取,后者使用表中的列名进行获取后者使用表中的列名进行获取。运行结果如图运行结果如图12-912-9所示。所示。图图12-9 运行结果运行结果 案例案例12-31

23、2-3中,首先判断表是否存在,存在则删除表,中,首先判断表是否存在,存在则删除表,然后创建一个表,并插入数据。预埋数据有四条,其然后创建一个表,并插入数据。预埋数据有四条,其idid分别是分别是100001100001、100002100002、100003100003和和100004100004,通过,通过idid比比100002100002大的条件去查询数据,返回大的条件去查询数据,返回100003100003和和100004100004两两条数据,与打印输出的数据一致。条数据,与打印输出的数据一致。最后,切勿忘记关闭最后,切勿忘记关闭数据库连接数据库连接!12.2 12.2 日志日志 日

24、志是记录程序运行信息的文本,和飞机的黑匣子日志是记录程序运行信息的文本,和飞机的黑匣子和航海日志一样,可以通过程序运行的日志信息判断程和航海日志一样,可以通过程序运行的日志信息判断程序的运行情况序的运行情况。特别是在碰到异常时,因为程序部署在特别是在碰到异常时,因为程序部署在服务器上不像本地一样可以通过运行发现问题,日志就服务器上不像本地一样可以通过运行发现问题,日志就成了至关重要的查错手段成了至关重要的查错手段。目前使用的日志中,目前使用的日志中,Log4jLog4j是比较稳定且常用的日是比较稳定且常用的日志之一,它是志之一,它是ApacheApache开源的一个项目。通过使用开源的一个项目

25、。通过使用Log4jLog4j,我们可以控制日志信息输送的目的地是控制台、文件、我们可以控制日志信息输送的目的地是控制台、文件、GUIGUI组件,甚至是套接口服务器、组件,甚至是套接口服务器、NTNT的事件记录器、的事件记录器、UNIX UNIX SyslogSyslog守护进程等;也可以控制每一条日志的输守护进程等;也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,能够更加细出格式;通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程致地控制日志的生成过程。Log4jLog4j最大的特点之一就是最大的特点之一就是可以通过配置修改日志打印的级别而不需要修改任何代可以通过配

26、置修改日志打印的级别而不需要修改任何代码。码。Log4j Log4j的日志级别一般分为五种,分别是:的日志级别一般分为五种,分别是:DEBUGDEBUG、INFOINFO、WARNWARN、ERRORERROR和和FATALFATAL。日志的级别是为了协助日志的级别是为了协助相关人员快速查询对应的问题而设定的相关人员快速查询对应的问题而设定的。1 1DEBUGDEBUG级别级别 DEBUG Level DEBUG Level指出的日志细粒度信息对于应用程序指出的日志细粒度信息对于应用程序的调试是非常有帮助的,这些日志能够帮助开发者判断的调试是非常有帮助的,这些日志能够帮助开发者判断程序是否符合

27、预期,这些日志一般只在程序开发和调试程序是否符合预期,这些日志一般只在程序开发和调试阶段使用。阶段使用。2 2INFOINFO级别级别 INFO INFO levellevel表明消息在粗粒度级别上突出强调应用表明消息在粗粒度级别上突出强调应用程序的运行过程程序的运行过程。这类数据一般较为详细,能够帮助相这类数据一般较为详细,能够帮助相关人员判断问题所在关人员判断问题所在。3 3WARNWARN级别级别 WARN WARN levellevel表明会出现潜在错误的情形表明会出现潜在错误的情形。一般此类一般此类日志出现得比较少,也比较少用日志出现得比较少,也比较少用。4 4ERRORERROR级

28、别级别 ERROR ERROR levellevel指出虽然发生错误事件,但仍然不影指出虽然发生错误事件,但仍然不影响系统的继续运行响系统的继续运行。此类信息会帮助开发者定位问题所此类信息会帮助开发者定位问题所在,判断该问题是否需要处理等在,判断该问题是否需要处理等。5 5FATALFATAL级别级别 FATAL FATAL levellevel指出每个严重的错误事件将会导致应指出每个严重的错误事件将会导致应用程序的退出用程序的退出。Log4j Log4j建议只使用四个级别,优先级从高到低分别是建议只使用四个级别,优先级从高到低分别是 ERRORERROR、WARNWARN、INFOINFO、

29、DEBUGDEBUG。通过在这里定义的级别,可通过在这里定义的级别,可以控制到应用程序中相应级别的日志信息的开关以控制到应用程序中相应级别的日志信息的开关。比如在这。比如在这里定义了里定义了INFOINFO级别,则应用程序中所有级别,则应用程序中所有DEBUGDEBUG级别的日志信级别的日志信息将不被打印出来,也就是说大于等于的级别的日志才输出。息将不被打印出来,也就是说大于等于的级别的日志才输出。TipsTips:需要注意的是,需要注意的是,Log4jLog4j在多线程情况下会竞争在多线程情况下会竞争LoggerLogger的的锁,导致系统性能在高并发情况下吞吐量严重下降,而且,锁,导致系统

30、性能在高并发情况下吞吐量严重下降,而且,ApacheApache官网已经停止更新官网已经停止更新Log4jLog4j了,所以可以使用了,所以可以使用Log4j2Log4j2或或者者logbacklogback等日志框架。等日志框架。12.3 12.3 测试测试 在程序开发的进程中,测试一直是一个无法规避且在程序开发的进程中,测试一直是一个无法规避且非常重要的模块非常重要的模块。但是需要认识到的是,测试不一定能但是需要认识到的是,测试不一定能保证一个程序是完全正确的保证一个程序是完全正确的。但是,测试可以确保程序。但是,测试可以确保程序做了我们期望它做的事情,也能够使开发者尽早发现程做了我们期望

31、它做的事情,也能够使开发者尽早发现程序的不足和序的不足和BUGBUG,在快速软件开发一书中引用的大,在快速软件开发一书中引用的大量研究数据指出:最后才修改一个量研究数据指出:最后才修改一个BUGBUG的代价是它产生的代价是它产生时就修改的代价的时就修改的代价的1010倍!倍!12.3.1 12.3.1 JUnitJUnit简介简介 在在JavaJava开发实践中,说到测试,大名鼎鼎的开发实践中,说到测试,大名鼎鼎的JUnitJUnit一定是所有程序员都熟知的回归测试框架,是单元测试一定是所有程序员都熟知的回归测试框架,是单元测试中不可或缺的框架中不可或缺的框架。JUnitJUnit是一个开放源

32、代码的是一个开放源代码的JavaJava测测试框架,用于编写和运行可重复的测试试框架,用于编写和运行可重复的测试。它是用于单元测试框架体系它是用于单元测试框架体系xUnitxUnit的一个实例(用的一个实例(用于于JavaJava语言),包含以下特性语言),包含以下特性。用于测试期望结果的断言(用于测试期望结果的断言(AssertionAssertion)。)。用于共享共同测试数据的测试工具用于共享共同测试数据的测试工具。用于方便地组织和运行测试套件用于方便地组织和运行测试套件。图形和文本的测试运行器图形和文本的测试运行器。JUnitJUnit属于白盒测试,程序员知道软件是如何完成属于白盒测试

33、,程序员知道软件是如何完成相关功能的相关功能的。在一般的项目中,。在一般的项目中,JUnitJUnit一般通过一般通过MAVENMAVEN工工具进行版本管理,通过配置对应的仓库位置并设置对应具进行版本管理,通过配置对应的仓库位置并设置对应应用域,可以让应用域,可以让JUnitJUnit的的JarJar包和对应的单元测试内容不包和对应的单元测试内容不会被打包到生产包中,既方便了开发者的测试,也不会会被打包到生产包中,既方便了开发者的测试,也不会影响正式的程序发布。影响正式的程序发布。12.3.2 12.3.2 功能测试及断言功能测试及断言 JUnit JUnit的强大之处在于它可以对测试期望结果

34、进行的强大之处在于它可以对测试期望结果进行断言,这使得测试案例可以自动运行、自行验证,它会断言,这使得测试案例可以自动运行、自行验证,它会告诉我们测试结果是否通过,而无须开发者和维护者自告诉我们测试结果是否通过,而无须开发者和维护者自行判断结果是否正确。行判断结果是否正确。使用使用JUnitJUnit进行单元测试需要导入测试必需的进行单元测试需要导入测试必需的JUnitJUnit的的JarJar包,读者可自行下载或者使用源代码中提供的包,读者可自行下载或者使用源代码中提供的JarJar包包。其导入方式同。其导入方式同JDBCJDBC驱动包的导入方式一样。驱动包的导入方式一样。运行结果如图运行结

35、果如图12-1012-10所示。所示。图图12-10 运行结果运行结果 在使用在使用JUnitJUnit测试方法和接口时,需要使用测试方法和接口时,需要使用TestTest注注解标记该方法是一个解标记该方法是一个JUnitJUnit测试案例测试案例。为了便于直观地查。为了便于直观地查看测试是否成功,看测试是否成功,EclipseEclipse提供了一个提供了一个JUnitJUnit的页签专门的页签专门用于查看测试方法是否正确运行,其显示结果如图用于查看测试方法是否正确运行,其显示结果如图12-1112-11所示。所示。图图12-11 JUnit页签的指标及含义页签的指标及含义 运行结果如图运行

36、结果如图12-1212-12和图和图12-1312-13所示。所示。图图12-12 运行结果运行结果图图12-13 运行结果运行结果 通过该案例可以发现通过该案例可以发现BeforeClassBeforeClass和和BeforeBefore的异的异同点同点。首先,。首先,BeforeClassBeforeClass注解的方法必须是注解的方法必须是staticstatic修饰的;其次,该注解注释的方法只在每次执行该类的修饰的;其次,该注解注释的方法只在每次执行该类的测试方法时运行一次,而测试方法时运行一次,而BeforeBefore注解的方法不需要使注解的方法不需要使用用staticstati

37、c修饰,该方法会在测试类运行过程中每次调用修饰,该方法会在测试类运行过程中每次调用一个方法前执行一次该方法。一个方法前执行一次该方法。有些读者在运行该案例时,会遇到有些读者在运行该案例时,会遇到JUnitJUnit页签抛出页签抛出initializationErrorinitializationError错误的情况,这是因为没有导入错误的情况,这是因为没有导入hamcrest-core-1.3.jarhamcrest-core-1.3.jar这个这个JarJar包导致的,其错误如包导致的,其错误如图图12-1412-14所示。所示。导入后运行正常导入后运行正常。图图12-14 initiali

38、zationError异常异常12.4 12.4 事务事务 JavaJava中的事务主要是指数据库的事务中的事务主要是指数据库的事务。数据库事务数据库事务(DatabaseDatabase TransactionTransaction)是指作为单个逻辑工作单元执)是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行行的一系列操作,要么完全地执行,要么完全地不执行。一个逻辑单元如果要成为事务,必须满足所谓的一个逻辑单元如果要成为事务,必须满足所谓的ACIDACID属性,即原子性、一致性、隔离性和持久性。属性,即原子性、一致性、隔离性和持久性。1 1原子性(原子性(Atomi

39、cAtomic)事务必须是原子工作单元,对于其数据修改,要么事务必须是原子工作单元,对于其数据修改,要么全都执行,要么全都不执行全都执行,要么全都不执行。如果系统只执行这些操作如果系统只执行这些操作的一个子集,就会破坏事务的总体目标,原子性消除了的一个子集,就会破坏事务的总体目标,原子性消除了系统只处理子集的可能性系统只处理子集的可能性。2 2一致性(一致性(ConsistentConsistent)事务在完成时,必须使所有的数据都保持一致状态事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以在相关数据库中,所有规则都必须应用于事务的修改,以保持所

40、有数据的完整性保持所有数据的完整性。事务结束时,所有的内部数据结事务结束时,所有的内部数据结构(如构(如 B B 树索引或双向链表)都必须是正确的树索引或双向链表)都必须是正确的。这些操这些操作需要开发者强制空置已知的完整性约束作需要开发者强制空置已知的完整性约束。3 3隔离性(隔离性(InsulationInsulation)由并发事务所作的修改必须与任何其他并发事务所由并发事务所作的修改必须与任何其他并发事务所作的修改隔离作的修改隔离。事务查看数据时数据所处的状态,要么。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一并发事是另一并发事务修改它之前的状态,要么是

41、另一并发事务修改它之后的状态,事务不会查看中间状态的数据。务修改它之后的状态,事务不会查看中间状态的数据。这称为隔离性,因为它能够重新装载起始数据,并且重这称为隔离性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行播一系列事务,以使数据结束时的状态与原始事务执行的状态相同的状态相同。需要注意的是,执行一组事务获得的结果与单个执需要注意的是,执行一组事务获得的结果与单个执行每个事务所获得的结果是相同的,但事务的高度隔离行每个事务所获得的结果是相同的,但事务的高度隔离会限制可执行的事务的数量会限制可执行的事务的数量。所以,对于一些场景,事所以,对于一些场景,事务

42、需要降低隔离级别或者将事务拆分成更小的事务单元务需要降低隔离级别或者将事务拆分成更小的事务单元以提升系统的吞吐量以提升系统的吞吐量。4 4持久性(持久性(DurationDuration)事务完成之后,它对于系统的影响是永久性的事务完成之后,它对于系统的影响是永久性的。该该修改即使出现致命的系统故障也将一直保持修改即使出现致命的系统故障也将一直保持。事务分为本地事务和分布式事务,相较于分布式事事务分为本地事务和分布式事务,相较于分布式事务,本地事务比较简单,只需要设置对应的事务单元然务,本地事务比较简单,只需要设置对应的事务单元然后统一提交即可后统一提交即可。为模拟事务模型,我们使用转账模型进

43、行模拟为模拟事务模型,我们使用转账模型进行模拟。假假设有两个账户设有两个账户 张三账户和李四账户,张三账户向张三账户和李四账户,张三账户向李四账户转账李四账户转账100100元,则只有在张三账户余额减少元,则只有在张三账户余额减少100100元元且李四账户余额增加且李四账户余额增加100100元时,才认为转账业务成功。元时,才认为转账业务成功。运行结果如图运行结果如图12-1512-15所示。所示。图图12-15 运行结果运行结果 从运行结果可以看出,事务是正常完成的从运行结果可以看出,事务是正常完成的。为了模为了模拟出错的情况,在转账的步骤还未提交前手动抛出一个拟出错的情况,在转账的步骤还未

44、提交前手动抛出一个错误,查看运行结果错误,查看运行结果。为了验证事务的有效性,在转账方法中手动抛出一为了验证事务的有效性,在转账方法中手动抛出一个空指针异常,经运行,程序的运行结果如图个空指针异常,经运行,程序的运行结果如图12-1612-16所所示。示。图图12-16 运行结果运行结果 通过运行结果可以看出,当异常抛出时,对张三账通过运行结果可以看出,当异常抛出时,对张三账户的数据修改没有生效,对李四账户的数据修改也没有户的数据修改没有生效,对李四账户的数据修改也没有生效,符合数据修改的事务特性生效,符合数据修改的事务特性。12.5 12.5 简易网上银行系统简易网上银行系统 简易网上银行系

45、统是具有账户查询、账户存取款和简易网上银行系统是具有账户查询、账户存取款和转账业务的简单网上自主银行转账业务的简单网上自主银行。该系统有用户登录系统。该系统有用户登录系统和账户操作系统,其中用户登录系统有用户注册和用户和账户操作系统,其中用户登录系统有用户注册和用户登录两个模块,账户操作系统则有账户查询、账户存取登录两个模块,账户操作系统则有账户查询、账户存取款和账户转账业务模块,每个模块负责一个功能,共同款和账户转账业务模块,每个模块负责一个功能,共同组成一个简易的网上自主银行系统。组成一个简易的网上自主银行系统。12.5.1 12.5.1 基础项目搭建基础项目搭建 为了开发为了开发WebW

46、eb项目,必要的软件安装和准备工作必项目,必要的软件安装和准备工作必不可少,前期准备完成之后,就需要进行项目搭建了不可少,前期准备完成之后,就需要进行项目搭建了。本次项目搭建需要使用到的软件有:本次项目搭建需要使用到的软件有:JavaJava开发环境、开发环境、EclipseEclipse开发工具和开发工具和TomcatTomcat WebWeb项目发布程序项目发布程序。其中其中JavaJava开发环境和开发环境和EclipseEclipse开发工具读者都已经安装并使开发工具读者都已经安装并使用过了用过了。1 1Tomcat WebTomcat Web应用服务器应用服务器 Tomcat Tom

47、cat最初是由最初是由SunSun公司的软件架构师詹姆斯公司的软件架构师詹姆斯邓邓肯肯戴维森开发的,后来他帮助将其变为开源项目,并戴维森开发的,后来他帮助将其变为开源项目,并由由SunSun公司贡献给公司贡献给ApacheApache软件基金会。软件基金会。它是一个免费的它是一个免费的开放源代码的开放源代码的WebWeb 应用服务器,属于轻量级应用服务器,应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试使用,是开发和调试JSP JSP 程序的首选程序的首选。当然随着技术的当然随着技术的发展,目前

48、主流的网站已经很少使用发展,目前主流的网站已经很少使用JSPJSP技术开发技术开发WebWeb项项目了,只因其性能不如目了,只因其性能不如HTMLHTML强强。TomcatTomcat是免安装的,只需要在是免安装的,只需要在TomcatTomcat官网下载对官网下载对应的应的zipzip包,解压到本地目录并添加到包,解压到本地目录并添加到EclipseEclipse中去即可中去即可。读者可以在读者可以在TomcatTomcat官网下载最新版本,下载后解压到固官网下载最新版本,下载后解压到固定目录下,打开定目录下,打开EclipseEclipse开发工具,选择工具栏上的开发工具,选择工具栏上的W

49、indowWindow菜单下的菜单下的PreferencesPreferences选项,如图选项,如图12-1712-17所示。所示。图图12-17 打开首选项打开首选项 在弹出的在弹出的EclipseEclipse首选项对话框中,首先找到首选项对话框中,首先找到“ServerServer”,然后找到其下的然后找到其下的“RuntimeRuntime Environment Environment”选项并单击,弹出选项并单击,弹出服务器配置对话框,如图服务器配置对话框,如图12-1812-18所示。所示。图图12-18 服务器配置对话框服务器配置对话框 单击单击“NextNext”按钮,会弹出

50、具体的服务器配置对话按钮,会弹出具体的服务器配置对话框,单击框,单击“确定确定”按钮,完成按钮,完成TomcatTomcat的配置工作的配置工作。如图。如图12-1912-19所示。所示。图图12-19 配置配置Tomcat服务器服务器 完成配置之后,在完成配置之后,在EclipseEclipse工具的工具的ServersServers视图下视图下添加服务器,如图添加服务器,如图12-2012-20所示。所示。图图12-20 在在Servers视图下添加服务器视图下添加服务器 完成添加之后,就可以看到完成添加之后,就可以看到ServersServers视图下有了一视图下有了一个个TomcatT

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(Java程序设计基础教程第12章-综合实训-简易网上自助银行系统.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|