数据库应用技术系统开发.docx
- 文档编号:29005649
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:53
- 大小:258.73KB
数据库应用技术系统开发.docx
《数据库应用技术系统开发.docx》由会员分享,可在线阅读,更多相关《数据库应用技术系统开发.docx(53页珍藏版)》请在冰豆网上搜索。
数据库应用技术系统开发
第章数据库应用系统开发
学习目标:
●了解数据库访问接口相关概念。
●了解JSP基本知识。
●掌握JSP访问Oracle数据库的方法。
●掌握基于JSP的数据库应用系统开发的思路和方法。
一个完整的数据库应用系统在逻辑上包括用户界面和数据库访问链路。
Oracle不具备图形用户界面的设计功能,一般把它作为整个数据库应用系统的后端数据库,满足客户端连接数据库和存储数据的需要。
图形用户界面的设计工作通常使用可视化开发工具来完成,如VisualStudio2005、Java、JSP等。
本章将以JSP作为开发工具,介绍开发数据库应用系统的方法。
.1数据库访问接口
.1.1ODBC
开放式数据库互联(OpenedDatabaseConnectivity,ODBC)是一种用于访问数据库的统一界面标准,由Microsoft公司于1991年底发布,它应用数据通信方法、数据传输协议、DBMS等多种技术定义了一个标准的接口协议,允许应用程序以SQL作为数据存取标准,来存取不同的DBMS管理的数据。
ODBC是基于SQL语言的,是一种在SQL和应用界面之间的标准接口,它解决了嵌入式SQL接口非规范核心问题,免除了应用软件随数据库的改变而改变的麻烦。
1.ODBC组成
ODBC是一个分层体系结构,由四部分构成:
ODBC数据库应用程序(Application)、驱动程序管理器(DriverManager)、DBMS驱动程序(DBMSDriver)、数据源(DataSource)。
(1)应用程序
应用程序利用ODBC接口中的ODBC功能与数据库进行操作,其主要功能有:
调用ODBC函数,递交SQL语句给DBMS,检索出结果,并进行处理。
应用程序要完成ODBC外部接口的所有工作。
(2)驱动程序管理器
驱动程序管理器是一个动态连接库(DLL),用于连接各种DBS的DBMS驱动程序(如SQLServer、Oracle、Sybase等驱动程序),管理应用程序和DBMS驱动程序之间的交互作用。
当一个应用程序与多个数据库连接时,驱动程序管理器能够保证应用程序正确地调用这些DBS的DBMS,实现数据访问,并把来自数据源的数据传送给应用程序。
(3)DBMS驱动程序
应用程序不能直接存取数据库,其各种操作请求要通过ODBC的驱动程序管理器提交给DBMS驱动程序,通过驱动程序实现对数据源的各种操作,数据库的操作结果也通过驱动程序返回给应用程序。
应用程序通过调用驱动程序所支持的函数来操纵数据库。
驱动程序也是一个动态连接库(DLL)。
(4)ODBC的数据源
数据源(DataSourceName,简称DSN)是驱动程序与DBS连接的桥梁,数据源不是DBS,而是用于表达一个ODBC驱动程序和DBMS特殊连接的命名。
数据源分为以下三类:
●用户数据源:
用户创建的数据源,称为“用户数据源”。
此时只有创建者才能使用,并且只能在所定义的机器上运行。
任何用户都不能使用其他用户创建的用户数据源。
●系统数据源:
所有用户和在WindowsNT下以服务方式运行的应用程序均可使用系统数据源。
●文件数据源:
文件数据源是ODBC3.0以上版本增加的一种数据源,可用于企业用户,ODBC驱动程序也安装在用户的计算机上。
创建数据源最简单的方法是使用ODBC驱动程序管理器。
在连接中,用数据源名来代表用户名、服务器名、所连接的数据库名等,可以将数据源名看成是与一个具体数据库建立的连接。
.1.2JDBC
JDBC是Java数据库连接(JavaDataBaseConnectivity)技术的简称,是Java同许多数据库之间连接的一种标准,这种连接独立于数据库。
它是由Sun定义了技术规范,并由Sun及其Java合作伙伴开发的与平台无关的标准数据库访问接口。
JDBC主要由两部分组成:
一部分是由数据库厂商提供的使Java程序能够与数据库连接通信的驱动程序,即JDBC数据库驱动程序;另一部分是访问数据库的高层接口,即通常所说的JDBCAPI。
2.JDBC数据库驱动程序
JDBC驱动程序可以分为以下四类:
●JDBC-ODBC桥加ODBC驱动程序:
该类驱动程序为Java应用程序提供了一种把JDBC调用映射为ODBC调用的方法。
这种类型的驱动使Java应用可以访问所有支持ODBC的DBMS。
●部分用Java来编写的本地API驱动程序:
该类驱动程序把客户机API上的JDBC调用转换为对特定的数据库如Oracle、Sybase、DB2等或其它DBMS的调用。
●JDBC网络纯Java驱动程序:
该类驱动程序将JDBC调用转换为与DBMS无关的网络协议。
●本地协议纯Java驱动程序:
该类驱动程序将JDBC调用直接转换为DBMS所使用的网络协议。
这将允许从客户机上直接调用DBMS服务器。
3.JDBCAPI
JDBC定义了表示数据库连接、SQL句柄、预编译的SQL句柄、执行存储过程的SQL句柄、记录集、记录集元数据和数据库元数据的Java接口。
这些接口提供了标准的数据库访问功能。
下面介绍JDBC中DriverManager、Connection、Statement、PrepareStatement、CallableStatement和ResultSet的使用。
(1)DriverManager
DriverManager是用于管理JDBC驱动程序的接口。
这个接口的主要用途是通过getConnection方法来取得Connection对象引用。
常用方法如下:
●publicstaticsynchronizedConnection(Stringurl,Stringuser,Stringpwd)throwsSQLException:
该方法获得url对应数据库的一个连接。
●publicstaticvoidsetLoginTimeout(intseconds):
该方法用于设置要进行数据库登录时驱动程序等待的迟延时间。
(2)Connection
Connection对象是通过DriverManager.getConnection()取得的,表示驱动程序提供的与数据库连接的对话。
常用方法如下:
●StatetementcreateStatement()throwsSQLException:
该方法返回一个Statetement对象。
●CallableStatementprepareCall(Stringsql):
该方法返回一个CallableStatement对象,该对象能够调用存储过程。
●PrepareStatementprepareStatement(Stringsql)throwsSQLException:
该方法返回一个PrepareStatement对象,并能把SQL语句提交刀数据库进行预编译。
●voidsetAutoCommit(BooleanautoCommit)throwsSQLException:
该方法用于设置事务提交的模式。
●voidcommit()throwsSQLException:
该方法作用是进行当前业务开始以来的所有改变。
●voidrollback()throwsSQLException:
该方法作用是放弃当前业务开始以来的所有改变。
(3)Statement
Statement是向数据库提交SQL语句并返回相应结果的工具。
语句可以是SQL查询、修改或插入。
常用方法如下:
●ResultSetexecuterQuery(Stringsql)throwsSQLException:
用于执行一个查询语句并将返回结果集于ResultSet对象中。
●intexecuteUpdate(Stringsql)throwsSQLException:
用于执行一个修改或查询语句,并返回发生改变的记录条数。
●Booleanexecute(Stringsql)throwsSQLException:
用于执行一个修改或插入语句,返回的布尔值表示语句是否执行成功。
使用Statement方法时,语句可能返回或不返回ResultSet对象。
如果提交的时查询语句(select),通常使用executerQuery(Stringsql);如果提交的是修改或插入语句(update,delete,insert),通常使用executeUpdate(Stringsql)。
(4)PrepareStatement
PrepareStatement接口继承Statement接口。
当一条SQL语句需要稍加变化而反复执行时,通常使用PrepareStatement,如:
PrepareStatementpstmt=conn.PrepareStatement(“insertintostockvalues(?
?
?
)”);
While(rs.next())//rs为向数据库提交查询语句返回的结果集
{
pstmt.setString(1,rs.getString(“stockid”));
pstmt.setString(2,rs.getString(“stockName”));
pstmt.setString(3,rs.getString(“stockNum”));
pstmt.executeQuery();
}
(5)CallableStatement
CallableStatement继承PrepareStatement接口,用于执行存储过程。
例如:
CallableStatementstmt=conn.prepareCall(“{callMyProcedure(?
?
?
)}”);
stmt.setInt(1,77);
stmt.String(2,”Ruby”);
stmt.setInt(3,45);
stmt.executeUpdate();
存储过程MyProcedure的SQL语句脚本如下:
createorreplaceprocedureMyProcedure(sninnumber,nameinchar,ageinchar)
as
begin
insertintodeptvalues(sn,name,age);
end;
(6)ResultSet
ResultSet接口定义访问执行Statement产生的结果集的方法。
ResultSet结果集可以按照名称或列名(从1到n)访问。
其常用的方法如下:
●Booleannext()throwsSQLException:
将ResultSet定位到下一行。
ResultSet定位从结果集第一行开始。
●ResultSetMetaDatagetMetaData()throwsSQLException:
返回包含当前结果集说明的对象:
列号、每列类型和结果属性。
●voidclose()throwsSQLException:
释放ResultSet对象资源。
●Booleanabsolute(introw)throwsSQLException:
将结果集移动到指定行,如果row为负数,则放在倒数第几行。
.2使用JSP开发数据库应用程序
JSP(JavaServerPages)是一门热门的网络编程语言,适合编写目前流行的三层架构应用程序(数据访问层、业务逻辑层、页面表示层)。
JSP是在传统的静态页面文件(*.html,*.htm)中加入Java程序片断和JSP标记,构成JSP页面。
在JSP中,可以使用JavaBean封装页面中的表现逻辑或初步的业务逻辑,实现一些比较复杂的事务处理。
.2.1JAVA简介
Java是由Sun公司开发出来的。
它的诞生主要源于家用电器的芯片。
随着WWW的发展,Java语言得到了快速的发展,成为网络上流行的开发语言之一。
Java语言是面向对象编程语言,也是跨平台的语言,它具有简单、可移植性、面向对象、解释型、分布式、高性能、健壮性、多线程、安全、动态及体系结构等一系列优点。
●简单:
Java语言的风格类似于C++语言,但要比C++简单。
它舍弃了C++中一些不常使用、难于理解、易于混淆的特性。
●面向对象:
用Java语言编程的任何程序都具有面向对象的特点,利用类和对象的机制将数据及其操作封装在一起,通过统一的接口与外界交互。
●分布式:
Java语言的类库提供用HTTP和FTP传送信息的方法,Java程序能够通过URL很方便地打开和访问网络上的资源,其便利程度如同访问本地文件一样。
●解释型和高性能:
Java是解释型的语言,编译后生成可以在Java虚拟机(JVM)系统上被解释执行的字节码。
由于解释型语言的执行速度比编译型语言要慢,Java提供了即时编译(JIT)方法,它可以一次把字节码编译为本地代码,缓存得到的结果,在需要的时候重新调用,从而使Java的运行速度接近于普通的编译型语言。
●健壮性:
Java自己进行内存管理从而减少了内存出错的可能性,它提供的自动垃圾收集防止了编程人员在管理内存时容易产生的错误。
Java提供了异常处理机制,在编译时,Java将提示可能出现但未被处理的异常,帮助编程人员正确地进行选择以防止系统的崩溃。
另外,类型检查可以帮助编程人员检查出许多开发早期出现的问题。
●安全:
Java可以通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏。
另外,Java安全机制禁止Java程序进行一些操作:
如禁止运行时堆栈溢出、禁止在自己的处理空间外破坏内存等。
●体系结构中立:
Java程序设计者的目标是“一次编写,处处运行”。
Java编译器通过生成与特定计算机体系结构无关的字节码指令来实现这个目标。
而且字节码文件既可以容易地在当今大多数通用计算机体系结构上解释执行,也能够在运行时很容易地被翻译成本地机器代码。
●可移植性:
结构中立构成了程序可移植性的基础。
Java语言的基本数据类型长度采取了固定长度消除了代码移植时让人头疼的主要问题。
另外,Java的类库提供了可移植性的接口。
●多线程:
Java提供了一套复杂地线程同步化机制,使得编程人员可以很方便地使用这种机制设计的方法,编写出健壮的多线程程序。
●动态:
Java的动态性使得它能够适应发展的环境。
Java的类库可以随意地增加新的方法及实例变量,而客户端可以不做任何更改。
.2.2Javabean简介
JavaBean是JavaSoft公司开发的技术组件,实现了“Wrireonce,runanywhere,reuseeverywhere”,即一次编译,处处运行,具有“一次编写,可以在任何地方执行,可以在任何地方重用的”特性。
Javabean支持可视化和非可视化两种组件。
可视化的组件在运行中能够显示出来,像按钮、文本框等,都能在程序中显示出来;非可视化组件通常用来处理程序中的一些复杂事务,一般不会有可视化输出。
虽然平时使用的JavaBean以可视化的居多,但非可视化的JavaBean也有她的优点,特别是jsp,它只支持非可视化的JavaBean,来实现一些比较复杂的事务处理。
.2.3Javabean与JSP结合
在JSP中,可以使用javabean封装页面中的表现逻辑或初步的业务逻辑。
在JSP中使用javabean需要用到javabean动作,一般语法格式如下:
useBeanid=”beanname”scope=”page|request|session|application”class=”package.class”> Jsp: useBean动作相当于在当前jsp页面中创建了package.class的一个对象。 创建javaBean对象后,可以通过jsp: setProperty动作设置javabean的值;其语法格式如下: setPropertname="beanname"property="propertyname"value="propertyValue"/>; 另外,也可以通过jsp: getProperty动作读取JavaBean中的值,其语法格式如下: getPropertyname=”beanname”property=”propertyName”/> .3案例的客户端程序 通过前面的学习,我们已经掌握了使用JSP连接数据库的方法。 本节我们以实际的“学生成绩管理信息系统”为例,采用面向对象的分析方法,使用JSP作为前端开发工具,Oracle作为后台数据库服务器来学习应用程序开发方法。 .3.1系统分析与设计 4.系统需求 学校每个学期都会为学生提供选修课,如何更加便捷的对选修课实行有效的管理,帮助学校、教师、学生方便的掌握学生学习情况,这就是“学生选课管理系统”需要完成的功能。 本系统主要功能就是帮助收集学生的选修课信息,主要功能有: 学生管理、教师管理、课程管理、成绩录入、成绩查询。 5.分析问题领域 (1)确定系统范围和系统边界。 “学生选课管理系统”涉及学生、教师、课程和成绩等数据的管理。 (2)定义活动者。 根据系统的职责范围和需求,确定系统中的3个活动者: 学生、教师、管理员。 对于每一个活动者,明确其业务活动的内容如下: ●“学生”使用该系统查询新学期开设的课程信息和教师开课信息,进行选课,查询自己的课程成绩信息。 ●“教师”使用系统查询新学期开设的课程信息、学生选课信息、录入和查询学生成绩信息。 ●“管理员”负责录入教师、学生、课程等数据,并进行维护、统计、查询和生成数据报表等。 (3)定义UseCase(用例图),UseCase是活动者与系统在交互中执行的有关事物序列。 根据系统需求,学生选课管理系统的UseCase图如图12.1所示。 图12.1“学生选课管理系统”UseCase图 (4)绘制交互图(顺序图和协同图)。 交互图用于描述UseCase如何实现对象之间的交互,用于建立系统的动态行为模型。 下面仅绘制出对活动者“学生”与UseCase“选课注册”的交互图(课程注册顺序图),如图12.2所示。 图12.2选课注册顺序图 6.建立分析模型 分析模型即系统的静态模型,由对象类图表示,用来描述系统的结构和组成。 根据用户需求,建立“学生选课管理信息系统”对象类图,如图12.3所示。 图12.3“学生选课管理系统”部分类图 7.建立动态行为模型 静态模型得到的类信息不完整,任何实际的系统都是活动的。 动态行为模型用来定义并描述系统结构元素的动态特征及行为。 下面以“学生”对象为例,绘制学生选课学生登记状态图(一个学生最多选3门课),如图12.4示 图12.4学生选课学生登记状态图 8.建立物理模型 物理设计的单位是组件,组件图表示组件和组件之间的关系。 学生选课管理系统组件图如图12.5所示。 图12.5“学生选课管理系统”组件图 .3.2系统实现 该系统采用三层结构设计模式: 数据访问层、业务逻辑层和页面表示层。 ●数据访问层: 主要负责数据库的访问,实现对数据的保存和读取操作。 与数据库操作有关的代码,如打开和关闭数据库连接,SELECT、INSERT、UPDATE、DELETE语句和调用存储过程等代码都应该放到这一层,表示层和业务逻辑层不应该包含任何对数据库直接操作的代码。 ●业务逻辑层: 业务逻辑层是表示层和数据访问层的桥梁,它响应表示层的用户请求,执行任务并从数据访问层提取数据,并将必要的数据传送给表示层。 业务逻辑层主要完成系统中的业务逻辑,如字段值的校验,是否可以为空以及一些异常处理等。 业务逻辑层的方法主要供表示层调用,同时调用数据访问层与数据库进行交互,起到一个承上启下的桥梁作用。 ●表示层: 表示层主要负责与用户的交互,如收集用户数据,将业务逻辑层的计算结果呈现给用户等。 9.数据访问层 //连接数据库类 packageMessageBoard.DAL; importjava.sql.*; import.URL; publicclassDataBase { Connectionconn=null; Statementstmt=null; CallableStatementcstmt=null; ResultSetrs=null; //@YSJ_PC: 服务器名 //1521: 端口号 //student: oracle数据库 Stringurl="jdbc: oracle: thin: @YSJ_PC: 1521: student"; publicDataBase() { try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn=DriverManager.getConnection(url,"system","stu"); stmt=conn.createStatement(); } catch(Exceptione) { System.out.print(e.toString()); } } publicResultSetexeQuery(Stringsql) { try { rs=stmt.executeQuery(sql); returnrs; } catch(Exceptione) { System.out.print(e.toString()); returnnull; } } publicintexeNonQuery(Stringsql) { try { returnstmt.executeUpdate(sql); } catch(Exceptione) { System.out.print(e.toString()); return-1; } } publicintexeProc(CallableStatementcstmt) { try { returncstmt.executeUpdate(); } catch(Exceptione) { System.out.println(e.toString()); return-1; } } publicResultSetexeProc1(Stringusername,Stringpwd) { try { CallableStatementctmt=conn.prepareCall("{callLogin(? ? )}"); ctmt.setString(1,username); ctmt.setString(2,pwd); returncstmt.executeQuery(); } catch(Exceptione) { System.out.println(e.toString()); returnnull; } } } //实现数据操作类 packageMessageBoard.DAL; importjava.sql.*; importjava.sql.Connection; importMessag
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 应用技术 系统 开发