Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx

上传人:b****3 文档编号:6978568 上传时间:2023-05-10 格式:DOCX 页数:37 大小:35.66KB
下载 相关 举报
Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx_第1页
第1页 / 共37页
Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx_第2页
第2页 / 共37页
Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx_第3页
第3页 / 共37页
Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx_第4页
第4页 / 共37页
Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx_第5页
第5页 / 共37页
Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx_第6页
第6页 / 共37页
Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx_第7页
第7页 / 共37页
Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx_第8页
第8页 / 共37页
Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx_第9页
第9页 / 共37页
Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx_第10页
第10页 / 共37页
Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx_第11页
第11页 / 共37页
Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx_第12页
第12页 / 共37页
Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx_第13页
第13页 / 共37页
Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx_第14页
第14页 / 共37页
Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx_第15页
第15页 / 共37页
Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx_第16页
第16页 / 共37页
Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx_第17页
第17页 / 共37页
Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx_第18页
第18页 / 共37页
Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx_第19页
第19页 / 共37页
Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx_第20页
第20页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx

《Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx》由会员分享,可在线阅读,更多相关《Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx(37页珍藏版)》请在冰点文库上搜索。

Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中第一部分.docx

Eclipse和HSQLDB将关系数据库服务器嵌入到Eclipse中第一部分

本文介绍如何开发将HSQLDB纯Java关系数据库服务器集成到EclipseWorkbench中的插件。

尽管不如DB2功能强大,也不如MySQL流行,但HSQLDB(超音速SQL数据库)可以满足很大范围内Java应用程序的需要,因为它具有可扩展性,而且对内存/处理器的要求不高。

如何编写将HSQLDB数据库服务器集成到EclipseWorkbench中的插件

级别:

中级

FernandoLozano

独立顾问

2003年12月

本文介绍如何开发将HSQLDB纯Java关系数据库服务器集成到EclipseWorkbench中的插件。

尽管不如DB2功能强大,也不如MySQL流行,但HSQLDB(超音速SQL数据库)可以满足很大范围内Java应用程序的需要,因为它具有可扩展性,而且对内存/处理器的要求不高。

超音速SQL数据库后来正式更名为HSQLDB,它是一类纯Java撰写的嵌入式关系数据库服务器,您可以在单机模式(使用直接文件访问)或客户机/服务器模式中使用它,它支持大量的并发用户。

尽管不如DB2功能强大,也不如MySQL流行,但HSQLDB(超音速SQL数据库)可以满足很大范围内Java应用程序的需要,因为它具有可扩展性,而且对内存/处理器的要求不高。

HSQLDB是一类使用方便的Java开发数据库,因为它支持StructuredQueryLanguage(SQL)的丰富子集,并且Java程序员根本不需要在他们的开发工作站上安装严重消耗处理器、内存和磁盘空间的数据库服务器。

它对于集成到EclipseIDE中来说是一种很理想的工具,既能为新手也能为经验丰富的开发人员提供有用的工具。

本文及同一系列的后续文章将向您展示如何构建一组Eclipse插件,以将HSQLDB嵌入到EclipseWorkbench中。

您将看到一个现实世界中的例子,目的是说明如何在考虑到API和用户接口(UI)的情况下开发这类插件,以及如何评估可供选择的方法以给用户带来所需要的功能。

本文假定您使用的是EclipseSDK分布,而不是PlatformRuntime-Binary加上JDT。

但如果只是为了开发常规Java应用程序,则后者更加适合。

在这个系列中,我们将根据“LevelsofIntegration”一文中描述的基本原理(请参阅本文后面的参考资料中给出的链接),使用三个步骤创建并扩展插件组:

1.运行Eclipse中现有的工具,以便从Workbench菜单容易地访问所需要的预先存在的工具。

2.探讨如何使用Eclipse的其他功能来向预先存在的工具集添加值,从而提高Java开发人员的生产力。

3.使用SWT来重写工具,以实现与EclipseWorkbench的无缝集成。

了解HSQLDB

您可以从SourceForge(;请参阅参考资料中给出的链接)下载HSQLDB,其中包括源代码和文档。

这里注意不要与已经被冻结的原始SourceForge项目()相混淆。

二进制分布是一个标准的ZIP文件,而您要做的就是把这个ZIP文件解压缩到您硬盘上的某个地方。

所有HSQLDB组件——数据库引擎、服务器进程、JDBC驱动程序、文档以及一些实用工具——都放在一个单独的JAR包中,这个包安装在lib/hsqldb.jar中,大小在260KB左右。

运行数据库引擎只需170KB的RAM,这即使是PDA (如Sharp生产的Zaurus)也能够满足,而且包括源文件和文档在内的整个下载文件小到可以放到一张标准的1.44MB软盘上。

您可以从命令行启动数据库服务器和实用工具,具体方法是调用像org.hsqldb.Server

org.hsqldb.util.DatabaseManager

这样的方便的类,这两个类均可以接受为数不多的一组命令行选项,如“-url”(用于远程连接)、“-database”(用于直接文件访问)和“-user”。

还有一种“-?

”选项也可以被接受,其作用是提供关于有效命令行语法的帮助。

造成HSQLDB简单性的关键因素是SQL语句执行的顺序化。

也就是说,尽管许多并发用户可以连接到数据库上(当数据库以服务器模式运行时),但是所有SQL语句都被放到一个队列中,然后一次执行一条。

因此不需要实现复杂的锁定及同步算法。

尽管如此,HSQLB还是实现了ACID(Atomicity,Consistency,Isolation,andDurability,即原子性、一致性、隔离性和持久性)语义。

换句话说,它是一个事务性的数据库,但仅仅处于读未提交级别,还不具备事务隔离功能。

HSQLDB实际上是为嵌入式应用程序而不是为共同数据中心而创建的。

如果您想要使用触发器、聚合函数、外部联接、视图以及其他SQL功能,HSQLB都可以满足您的需要(大部分轻量级关系数据库无法做到这一点)。

通过把您的Java类添加到HSQLB的类路径中,您可以实现存储过程。

然后您发出一条

CREATEFUNCTION语句即可大功告成。

事实上,像SQRT和ABS之类的许多标准SQL函数都被实现为到标准Java类(比如

java.lang.Math)的直接映射

HSQLDB的运行模式

HSQLDB引擎可以以多种模式运行,以适应不同的应用场合:

驻留内存模式

所有数据库表和索引都放在内存中,而且永远不会保存到磁盘上。

在您发出为什么有人想要使用在应用程序终止时就会丢失的数据库这样的疑问之前,请先考虑为您可以使用标准SQL语句进行查询、排序、分组和更新的数据库数据拥有一块本地高速缓存。

单机模式

应用程序使用JDBC创建一个数据库连接,并且HSQLDB引擎运行在该应用程序中,这时允许直接访问数据库文件。

不能存在并发用户(应用程序独占地访问数据库文件),但因此也没有额外的线程和TCP连接开销。

单机模式是许多嵌入式应用程序的首选模式。

服务器模式

这是类似于其他关系数据库的标准客户机/服务器数据库配置,允许出现使用TCP套接字的并发连接。

大部分开发人员喜欢这种模式,因为它允许任何JDBC客户机在主应用程序仍在运行的情况下连接并查询/更新表。

Web服务器模式

HSQLDB可以用作Web服务器,可以通过HTTP接受SQL查询;也能作为任何标准Web容器中的servlet来运行,可以穿过防火墙或者安装在Web宿主服务上,而不用涉及到提供者支持小组(和昂贵的数据库宿主选项)。

由于HTTP是无状态的,所以本模式中不存在事务。

HSQLDB数据库文件结构

HSQLDB将所有表和索引数据放在内存中,将所有发出的SQL语句保存到一个名为database.script的文件中,该文件同时也充当着事务日志的角色。

初始化引擎之后,该文件被读取,然后其中所有的SQL语句都被运行,从而完成整个数据库的重建。

停机期间,HSQLDB引擎将生成一个新的database.script文件,其中只包含最少的语句,目的是让数据库可以快速启动。

除了默认放在内存中的表之外,HSQLDB还支持“缓存”表和“文本”表。

所有缓存表的数据放在一个名为database.data的文件中,而文本表的数据则放在由settablesource非标准SQL语句命名的任意分隔文本文件(像CSV文件)中。

缓存表支持比可用RAM大的数据集,而文本表则可以作为一种导入导出数据的方便手段。

除了database.script和database.data文件之外,任何HSQLDB数据库还可能包含一个database.properties文件,管理员可以在该文件中设置许多影响到ANSISQL兼容性的参数。

所有数据库文件(文本表数据文件除外)必须放在同一个目录中。

不存在创建HSQLDB数据库的显式方法。

如果您要求引擎打开一个目前不存在的数据库文件(使用服务器模式的-database选项或单机模式的JDBCURL),就会创建该文件及其所在目录。

所以,如果您肯定那个空数据库中存在数据,请检查是否有录入错误。

现在让我们开始开发插件!

创建HSQLDBEclipse插件组

把现有的应用程序放到Eclipse这样功能强大的工具中去并不是一件容易的事情。

值得庆幸的是,HSQLDB和Eclipse均降低了上述任务的难度,因为HSQLDB本身可以嵌入到其他应用程序中,而Eclipse提供了清晰而且易于理解的插件基础设施以及用于创建新插件的健壮的开发环境PDE。

即使您以前从未接触过Eclipse插件开发,PDE也可以让您很容易上手。

请参阅本文后面参考资料部分中讲述Eclipse基础知识的文章。

这些指导性内容假定您使用的是EclipseSDK分布,而不是PlatformRuntime-Binary加JDT。

但如果您只是要开发常规Java应用程序,则后者更加适合。

您可以使用您最喜欢的操作系统,因为我们将只使用Java代码,而根本不会用到本机代码。

为了创建有用的插件组并尽可能地少书写代码,我们将从最不费力的工作开始。

稍后,在这个系列的下一部分内容中,我们将看到如何利用Eclipse功能为HSQLDB提供增值。

在本文中,我们将集中讲述我们代码的下列功能:

1.以服务器模式启动HSQLDB引擎,这样用户应用程序和SQL控制台(像HSQLDB自带的DatabaseManager实用工具)都可以运行SQL语句。

2.完全停止HSQLDB服务器。

3.调用DatabaseManager实用工具,这样开发人员可以从Workbench交互式地输入SQL语句。

4.使用HSQLDBScriptTool实用工具运行SQL脚本文件。

这些年来,为了创建数据库表和插入测试数据,我已经在我的项目文件夹中放入了大量*.sql文件,而且长久以来,我一直希望能够有一种容易的方式来运行它们。

5.配置HSQLDB连接属性,比如TCP端口和管理员密码。

如何才能使得这些函数可以为Workbench所用呢?

完成前面三步最容易的方式是提供一个actionSet,它被添加到新的顶级菜单中并且可从它自己的工具栏访问。

运行SQL脚本文件的操作必须只被绑定到扩展名为“*.sql”的文件上,所以这将是一个objectContribution,它被Workbench添加到显示这些文件的任意视图上的弹出式菜单中。

最后,连接参数要能很好地符合插件的参数选择页面,从WorkbenchWindow菜单中可以访问这个页面。

图1显示了新的菜单和工具栏,而图2显示了Navigator视图的弹出式菜单中的新项,图3则显示了属性页面,这样您就可以看到我们的插件组的第一个版本是什么样子。

图1.HSQLDB菜单和相关工具栏

图2.添加到*.sql文件的弹出式菜单项

图3.HSQLDB连接属性

把HSQLDB变成一个Eclipse插件

构建我们的插件组的第一步是把HSQLDB本身包装成一个Eclipse插件。

这个插件将只包含hsqldb.jar和Workbench要求的必要的plugin.xml文件。

如果您已经浏览了标准Eclipse插件目录,那么您可能已经发现,JUnit,Xerces,Tomcat,以及其他常见的Java包被隔离在它们各自的插件中,未曾改变,而且所有的Eclipse细节都被封装在其他插件中。

这种划分方式使得这些第三方工具易于更新,而不一定要求改变Eclipse本身。

另外一个好处就是与许多插件共享这些常见的库很容易。

打开您的EclipseSDK安装,并创建一个新的插件项目;将其命名为hsqldb.core(我知道推荐使用的名称是org.hsqldb.core,但是我不愿意假装使用了HSQLDB名称空间。

或许HSQLDB开发人员阅读至此会赞同这个想法,并推荐它为“正式的”Eclipse集成插件;这样的话该名称极有可能被改掉)。

确保选中的是“EmptyPlugin”选项,而不是任何插件模板;否则,您将得到一个毫无用处的顶级插件类,如果您创建了该类之后希望删掉它,那么它可以被安全地删除。

把hsqldb.jar从您的HSQLDB安装拷贝到项目目录中,并将其添加到项目的Runtime。

您可以使用PDEPluginManifestEditor或者简单地拷贝清单1中的内容来完成这项工作。

清单1.用于hsqldb.core插件的plugin.xml清单文件

xmlversion="1.0"encoding="UTF-8"?

>

id="hsqldb.core"

name="HsqldbCorePlug-in"

version="0.0.1"

provider-name="FernandoLozano(www.lozano.eti.br)">

添加Workbench扩展

接下来,创建名为hsqldb.ui的第二个插件项目。

这个项目将为插件组的第一修订本包含所有的Eclipse扩展:

包含三个操作的一个操作集、与*.sql文件相关的对象作用,以及一个属性页面。

将其主类(Plugin类)命名为PluginUi,并接受包的默认名称

hsqldb.ui。

使用PluginManifestEditor打开plugin.xml文件,并选择Extensions选项卡。

将所分配菜单更名为HSQLDB并改变示范操作,使其显示标签“RunsHSQLDBDatabaseManager”。

向带有标签“StopsHSQLDBdatabaseserver”和“StartsHSQLDBdatabaseserver”的同一个actionSet添加另外两个操作,并为每个操作提供惟一的操作ID和实现类。

请注意,上述操作将以与创建时相反的顺序(即与在插件清单文件中出现的顺序相反)显示在菜单和工具栏中。

单击Add按钮,从而使用Extension模板、弹出式菜单和属性页面添加两个新的扩展。

弹出式菜单应该与*.sql文件模式相关联,但是属性页面字段应该通过编程进行设置。

图4显示了PluginManifest编辑器的最终外观,并显示了所有的插件扩展;图5显示了对象分配的属性(注意针对*.sql文件的过滤器),而图6显示了文件资源弹出式菜单中的“RunSQLScript”操作的属性。

图标在本文的源代码中给出(请参阅参考资料),但是我敢肯定您认识有比这画得更好的图形专家!

图4.清单编辑器上的HSQLDB操作

图5.清单编辑器上的HSQLDB对象分配

图6.清单编辑器上的RunSQLScript操作

在能够给我们的操作添加代码之前,我们需要将这种UI插件与相应的核心插件区别开来,否则它将不能访问HSQLDB类。

转到PluginManifestEditor上的“Dependencies”页面,并添加一个插件依赖性,如图7所示。

某些依赖性,像“eclipse.ui”,由PDE自动进行配置,而其他依赖性,像“org.eclipse.debug.core”,则在对操作进行编码时添加。

如果您情愿直接编辑XML代码,清单2显示了hsqldb.ui插件的完整plugin.xml文件。

要完成插件的安装工作,请添加一个新类到hsqldb.ui包中,然后将其命名为HsqldbUtil。

这个类将包含所有直接处理HSQLDB的代码,并使分配的扩展代码保持简单。

图7.hsqldb.ui插件依赖性

清单2.hsqldb.ui插件的plugin.xml清单文件

xmlversion="1.0"encoding="UTF-8"?

>

id="hsqldb.ui"

name="HsqldbUiPlug-in"

version="0.0.1"

provider-name="FernandoLozano(www.lozano.eti.br)"

class="hsqldb.ui.PluginUi">

point="org.eclipse.ui.actionSets">

label="Hsqldb"

visible="true"

id="hsqldb.ui.actionSet">

label="Hsql&db"

id="hsqldbMenu">

name="dbServerGroup">

label="RunHsql&DatabaseManager"

icon="icons/dbman.gif"

tooltip="RunstheHsqldatabasemanager"

class="hsqldb.ui.actions.HsqldbDatabaseManagerAction"

menubarPath="hsqldbMenu/dbServerGroup"

toolbarPath="dbServerGroup"

id="hsqldb.ui.actions.HsqldbDatabaseManagerAction">

value="activated"

id="hsqldb.ui">

label="S&topHsqldb"

icon="icons/stop.gif"

tooltip="StopstheHsqldatabaseserver"

class="hsqldb.ui.actions.HsqldbStopAction"

menubarPath="hsqldbMenu/dbServerGroup"

toolbarPath="dbServerGroup"

id="hsqldb.ui.actions.HsqldbStopAction">

value="activated"

id="hsqldb.ui">

label="&StartHsqldb"

icon="icons/start.gif"

tooltip="StartstheHsqldatabaseserver"

class="hsqldb.ui.actions.HsqldbStartAction"

menubarPath="hsqldbMenu/dbServerGroup"

toolbarPath="dbServerGroup"

id="hsqldb.ui.actions.HsqldbStartAction">

value="installed"

id="hsqldb.ui">

point="org.eclipse.ui.perspectiveExtensions">

targetID="org.eclipse.ui.resourcePerspective">

id="hsqldb.ui.actionSet">

point="org.eclipse.ui.popupMenus">

objectClass="org.eclipse.core.resources.IFile"

nameFilter="*.sql"

id="hsqldb.ui.SQLScriptFiles">

label="RunSQLScript"

class="hsqldb.ui.popup.actions.HsqldbRunScript"

menubarPath="additions"

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

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2