数据库理论与技术课程论文.doc_第1页
数据库理论与技术课程论文.doc_第2页
数据库理论与技术课程论文.doc_第3页
数据库理论与技术课程论文.doc_第4页
数据库理论与技术课程论文.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Apache Derby 数据库系统分析1.引言程序设计师在开发应用软件过程中,不可避免的需要一个获得和存储数据的方法,我们希望使用到的数据库系统尽可能的简单,可扩展且易维护。Apache Derby正是用 Java 语言编写的一个理想的,并且开源的,容易管理的关系数据库管理系统。Apache Derby 是一个与平台无关的数据库引擎,所以可以在任何存在合适的 Java 虚拟机(JVM)的地方运行。这意味着 Derby 实际上可以在任何操作系统上运行,包括 Microsoft Windows、Macintosh、Linux 和 UNIX 平台。Derby 也可以在三个 Java 平台的任何一个上运行:Java 2 Platform, Micro Edition (J2ME)、Java 2 Platform, Standard Edition (J2SE) 和 Java 2 Platform, Enterprise Edition (J2EE)。Derby 软件绑定在 Java 档案(JAR)文件中,只有 2 MB 大小。由于内存占用这么小,所以 Derby 数据库可以容易地与应用程序绑定在一起。尽管Derby很容易安装,但是它的特性却非常丰富。它可以支持关系数据库中的所有企业级的特性,包括崩溃恢复、事务回滚和提交、行/表级锁、视图、主键/外键约束、触发器、子查询表达式等等。2.Derby数据库的系统结构2.1Derby的构成与访问Derby由数据库引擎和嵌入式JDBC驱动程序组成,应用程序使用JDBC与数据库交互。Derby系统是Derby数据库引擎的单个实例和实例运行的环境。它由系统目录、零个或多个数据库以及系统范围的配置组成。Derby数据库包含字典对象(如表、列、索引和jar文件)以及自己的配置信息。Derby数据库存储在文件中,这些文件留存在于数据库同名的目录中。Derby可以支持无限多表(只要有可用的磁盘空间),完整支持SQL92E和JDBC 2.0、3.0。Derby还提供了Identify columns、BLOBs、Transaction(ACID兼容)、Scheme、视图、图1.Derby的体系结构多用户访问、JCE加密、LDAP集成以及多语言支持等丰富的特性。Derby包括一个功能丰富的交互式脚本开发工具,它可以方便用户在Derby的数据库中运行脚本。同时,也可以交互式地运行特定查询。此外,ij还提供了多种方便访问JDBC功能的命令。例如,创建一个名为EDDB的数据库,使用语句connect jdbc:derby:EDDB;creat=true;建立基表emp和dep:在ij环境中可以使用标准的SQL语句完成数据库的所有操作,每条SQL命令后要加分号,退出时键入exit;即可。2.2Derby的特点Derby是一个名为Cloudscape的小公司构思的;当Cloudscape卖给Informix后,该产品得到了加强;当IBM加入时,在“big blue”期间,它的高端工程特性得到增强;现在已经成为一个有最自由的许可的开源项目而存在。Derby实现了完整的、可嵌入的、零配置的关系数据库引擎,它的关键特点包括:1纯Java:Derby是一个100Java的类库,天生具备平台无关性、易于配置和易于安装的特性。Derby不需要专用的Java虚拟机,具有一次编写,随处运行的特性。可以运行在各种平台上,包括Linux、Windows、Mac OS、AIX、SolariS、ZOS、AS400以及OS390等。2嵌入式数据库:应用程序可以将Derby引擎嵌入应用程序进程中,从而无需管理单独的数据库进程或服务,可以和应用程序在同一JVM中运行,无需进行网络通信。Derby数据库的启动和停止由应用程序控制,对终端用户来说是不可见的,甚至可以作为一个单一的jar文件随应用程序一起部署。3轻量级(Small footprint)数据库:Derby引擎是轻量级的。类文件大小大约是2MB,并且只使用了4MB的Java堆,甚至可以运行在物理内存仅有16MB的机器中。4基于标准的数据库系统:Derby实现了SQL92E标准和许多SQL99扩展以及SQL2003、SQLXML等。目前Derby支持JDBC 20和30以及J2MEOSGi。应用程序通过行业标准的JDBC API访问数据库。5完整的关系数据库引擎:Derby支持多用户、多线程、事务处理、行锁、隔离级别、死锁监测、崩溃恢复以及备份和恢复。6安全性:Derby在安全性方面的设计也非常严密,包括检测已签署的JAR文件,加密数据库,并支持外部用户身份验证模式的集成。7可扩展性:Derby支持下列Java扩展:Java函数、在触发器中使用Java函数、Java存储过程以及从数据库装入Java类。8易迁移性:Derby建立在开放标准基础上,任何针对Derby编写的应用程序都可以很容易地迁移到IBM DB2 UDB或其他数据库上运行,这正是企业级的解决方案所需要的。2.3Derby的使用模式可以用两种方式使用 Derby 数据库:l 作为内嵌的数据库,用户并不知道数据库的存在。应用程序使用数据库,二者在同一个 JVM 中运行,而数据库把数据保存在本地文件系统中。在内嵌模型中,数据库只与运行在同一 JVM 中的应用程序通信。l 作为客户/服务器连接,是许多商业厂商使用的更传统的模型。在这种模型中,应用程序通过网络连接与数据库通信,应用程序和数据库分别在各自的 JVM 中运行。数据库服务器可以与多个客户机应用程序通信。Derby可以工作在嵌入式模式下,或在完全的客户端/服务器模式下。图2说明了其在在嵌入式模式下的工作原理。 图2显示Derby引擎是嵌入在用户应用程序里的。当工作在嵌入式模式,用户的应用程序访问数据库是直接和专有的。这意味着其他应用程序不可能在同一时间访问该数据库。嵌入式模式的主要优点是不需要进行网络和服务器设置。因为你的应用程序包含了Derby引擎,使用者并不知道你使用了一个关系数据库。当使用Derby的嵌入式模式时,并不需要虚席复杂的配置和特殊的API。实际上,用户只要确保:l Derby JARs文件在你的应用程序classpath里l 使用嵌入式JDBC驱动l 写数据库访问代码到JDBC在以上三方面正确的前提下,Derby并没有提供特殊的APIs。只需要将应用程序连接到JDBC,Derby就可以执行相应的操作。图2.嵌入式模式在客户/服务器连接中,C/S结构的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。图3显示了Derby在此模式下的工作原理。在图3中,一个独立的Java进程运行作为Derby的网络服务器,通过网络监听客户端的连接。Derby网络服务器能唯一的访问数据库存储器,并能同时接受多个客户端连接。这就允许多个用户在同一时间通过网络方式访问该关系数据库管理系统。当不适合使用嵌入式模式进行操作时(例如:你必须运行和管理个别的服务器进程,或许在不同的机器上),当你需要多用户访问数据库时,Derby的客户端-服务器模式能提供一个有效的解决方案。值得注意的是客户端应用程序需编码到JDBC。这些不是Derby特有的APIs。事实上,这类似于图2中的运行在嵌入式下JDBC应用程序运行在客户端-服务器模式的最低配置下。插图3:客户端/服务器模式3.Derby系统的主要模块构成l 组件的体系结构Derby中可用功能组件集是定义良好的API,其协议与应用相分离。在Java应用接口中,组件通常被单独定义,也可以参照其他协议。当系统运行时,可以通过定义添加根操作或功能性函数来满足应用需求。组件通过共同协作来实现应用服务,单独的组件类似于外部API,可以持久有效或仅在运行时有效,组件通过主控来加载。图4.组件体系结构l 数据库引擎系统主控系统管理整个Derby系统,提供加载和关闭服务。通过定位服务,找到服务属性文件。需求经模块协议映射为服务。每段可包含单独的线程队列,在JDBC驱动下形成无状态的对象栈。图5.数据库引擎系统主控系统可动态管理内存与锁。内存管理系统为应用建立可存入接口对象,处理更新与裁剪等操作。锁系统通过可加锁接口建立加锁对象,优先级通过可锁级别来定义,而不是管理程序。l 数据库存储结构Derby数据存储结构为固定存储,其设计对Jave对象串行存储。对SQL语义并不支持,索引堆通过语言层次相连接。所有的语言访问接口均以行操作,不包括页容量。行级的固定模式实现了行级锁的加入。图6.Derby数据库的存储结构4.嵌入式环境下Derby数据库的应用开发4.1Derby的嵌入式应用在嵌入式环境中,Derby运行在与应用程序相同的JVM中,如图7所示。当Derby数据库嵌入在Java应用程序时,此数据库专用于单个应用程序。如果部署多个应用程序的多个副本,每个应用程序都有其自己的数据库副本和Derby驱动。Derby应用程序通过JDBC API访问嵌入式Derby数据库,由应用程序负责Derby数据库的启动、访问及关闭。图7.Derby的嵌入式应用Derby的嵌入式应用使用orgapachederbyjdbcEmbeddedDriver作为本地应用的JDBC驱动。连接JDBC的URL格式为dbc:derby:databasePath。这里的databasePath为Derby数据库所在文件路径,例如:jdbc:derby:c:uatabaLses/salesDB/数据库位于c:databaseskSalesDB文件夹中;在Java应用程序中访问Derby数据库的代码如下:String DerbyDriver=”orgapachederbyjdbcEmbeddedDriver:”/装载Apache Derby驱动程序ClassforName(DerbyDriver)newlnstance0;/连接数据库String url=”jdbc:derby:SalesDB”:Connectionconn=Driver-ManagergetConnecfion(url);Statement strut=conncreateStatement0;/执行SQL语句strutexecute(”insert into Orders values C20051003,MO-TODPT021,1000,505,2005-04-10,TBD)”);读取数据库中的数据ResultSet rset=stmt.executeQuery (”SELECT * FROM Or-ders”);rsetgetString(”OrderID”)4.2 Derby数据库的加密当将数据库部署到远程或移动位置上时,不可能使用物理安全性来阻止对数据的未授权访问。例如,如果笔记本计算机被盗,那么笔记本计算机上的移动数据库就可能被盗。如果远程管理员没有适当地保护文件,安装在远程多用户机器上的应用程序很容易被未经授权的用户访问。在这种环境中,保证数据安全的惟一方法就是在磁盘上对其进行加密。这样就只能读取数据库文件,而不会暴露数据。Derby通过指定dataEncryption和boot_Password来指定加密数据库,同时可以通过配置encryptionProvider和eneryptionAl-gorithm来选择加密运行库(如JCE)以及算法(默认为DES),范例如下:ijconnect jdbc:derby:SeeuritySalesDB;create=true;dataEneryption=ture;bootPassword=sales2005;要访问SecuritySalesDB数据库必须提供bootPassword,否则无法连接。当取读该数据库中的数据时,数据库引擎将对所有数据库进行解密,而当写回到磁盘时,又会再次对它们进行加密。数据库文件中没有以明文的形式存在的数据。因为整个数据库都被加密,同时隐藏了数据库模式的结构。进一步,Derby还可以与外部用户认证以及LDAP集成。4.3Derby的表操作JDBC是ij工具与数据库服务器通信的机制。 Derby 是 JDBC 驱动程序类的名称,ij工具使用该类与数据库服务器通信。 test 是要创建的数据库名称,help是获得 ij 工具的帮助。create=true 是应传递给 Derby JDBC 驱动程序的特定属性。JDBC 属性列在 URL 其他部分的后面,并用分号分隔。例1. Apache Derby 的 CREATE TABLE 语法CREATE TABLE schemaName.tableName ( | , | *) ;方括号( 和 )中的是可选参数。从正式语法中可以看出,模式名是可选的,在必需的头一个列之后(创建连一个列都没有的表是没有意义的),其他列定义或表级约束都是可选的。约束有两种类型:表级约束和列约束。约束通过某种方式对列或表进行限制。例如,可以用约束要求列总要有实际的值(没有 NULL 值),或者列中的每个项必须是惟一的,或者列被自动分配默认值。在未来的文章中将更详细地介绍约束。l 用 dblook 查看模式ava org.apache.derby.tools.dblook -d jdbc:derby:testdblook 工具是一个 Java 类,可以用它方便地把数据库的内容输出到控制台。在命令行上运行它,就像运行其他 Java 程序一样;惟一增加的就是使用 -d jdbc:derby:test 参数,这个参数指定 dblook 工具应当查询的数据库删除 Derby 中的表DROP TABLEschemaName.tableName ;ij run derby.create.sql ;运行合适的脚本文件,通过使用 run 命令可实现该操作,该命令接受单个参数:单引号括起的脚本文件名当该脚本执行时,可能会看到新 ij 提示、命令和警告或错误消息的组合。例2. SQL INSERT 语法INSERT INTO table-Name (Simple-column-Name , Simple-column-Name* ) ExpressionExpression 词可以扩展为下列四个不同的结构之一:单行 VALUES 列表、 多行 VALUES 列表 、SELECT 表达式 和UNION 表达式。例3. SELECT 语句的形式语法SELECT DISTINCT | ALL SelectItem , SelectItem * FROM clause WHERE clause GROUP BY clause HAVING clause SELECT 语句的其他部分都是可选的。但是,在构建第一个查询之前,您应该知道 Apache Derby 对 SELECT 语句组件的求值顺序。当 Apache Derby 处理查询时,求值顺序是:FROM 子句,WHERE 子句,GROUP BY 子句,HAVING 子句,SELECT 子句。例4. 使用表连接查询两个表ij SELECT p.price, p.description AS Item, v.vendorName AS Vendor FROM ducts AS p, bigdog.vendors AS vWHERE p.itemNumber = v.itemNumber ;l 在查询中使用 DISTINCT 限定符ij connect jdbc:derby:test ;ij SELECT DISTINCT vendorNumber AS Vendor # FROM bigdog.vendors ;l 在查询中使用 ORDER BY 子句ij SELECT v.vendorNumber AS Vendor #, vendorName as Vendor, p.price as Price, p.itemNumber AS Item #FROM ducts AS p, bigdog.vendors AS vWHERE p.itemNumber = v.itemNumber AND p.price 20.0ORDER BY v.vendorNumber ASC, p.price DESC ;可使用以下语句修改表模式l 更新表ij CREATE TABLE bigdog.newProducts (itemNumber INT NOT NULL,price DECIMAL(5, 2),stockDate DATE,count INT NOT NULL DEFAULT 0,description VARCHAR(40) ;0 rows inserted/updated/deletedij INSERT INTO bigdog.newProducts(itemNumber, price, stockDate, description) SELECT itemNumber, price, stockDate, description FROM

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论