Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中.docx
- 文档编号:5421798
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:14
- 大小:31.96KB
Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中.docx
《Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中.docx》由会员分享,可在线阅读,更多相关《Eclipse 和 HSQLDB 将关系数据库服务器嵌入到 Eclipse 中.docx(14页珍藏版)》请在冰豆网上搜索。
Eclipse和HSQLDB将关系数据库服务器嵌入到Eclipse中
Eclipse和HSQLDB:
将关系数据库服务器嵌入到Eclipse中,第1部
如何编写将HSQLDB数据库服务器集成到EclipseWorkbench中的插件
级别:
中级
FernandoLozano
独立顾问
2003年12月
本文介绍如何开发将HSQLDB纯Java关系数据库服务器集成到Eclipse
Workbench中的插件。
尽管不如DB2功能强大,也不如MySQL流行,但HSQLDB(超音速SQL数据库)可以满足很大范围内
Java应用程序的需要,因为它具有可扩展性,而且对内存/处理器的要求不高。
如何编写将HSQLDB数据库服务器集成到EclipseWorkbench中的插件
级别:
中级
FernandoLozano
独立顾问
2003年12月
本文介绍如何开发将HSQLDB纯Java关系数据库服务器集成到Eclipse
Workbench中的插件。
尽管不如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”一文中描述的基本原理(请参阅本文后面的参考资料
中给出的链接),使用三个步骤创建并扩展插件组:
运行Eclipse中现有的工具,以便从Workbench菜单容易地访问所需要的预先存在的工具。
探讨如何使用Eclipse的其他功能来向预先存在的工具集添加值,从而提高Java开发人员的生产力。
使用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提供增值。
在本文中,我们将集中讲述我们代码的下列功能:
以服务器模式启动HSQLDB引擎,这样用户应用程序和SQL控制台(像HSQLDB自带的DatabaseManager
实用工具)都可以运行SQL语句。
完全停止HSQLDB服务器。
调用DatabaseManager实用工具,这样开发人员可以从Workbench交互式地输入SQL语句。
使用HSQLDBScriptTool实用工具运行SQL脚本文件。
这些年来,为了创建数据库表和插入测试数据,我已经在我的项目文件夹中放入了大量
*.sql文件,而且长久以来,我一直希望能够有一种容易的方式来运行它们。
配置HSQLDB连接属性,比如TCP端口和管理员密码。
如何才能使得这些函数可以为Workbench所用呢?
完成前面三步最容易的方式是提供一个actionSet,它被添加到新的顶级菜单中并且可从它自己的工具栏访问。
运行
SQL脚本文件的操作必须只被绑定到扩展名为“*.sql”的文件上,所以这将是一个objectContribution,
它被Workbench添加到显示这些文件的任意视图上的弹出式菜单中。
最后,连接参数要能很好地符合插件的参数选择页面,从Workbench
Window菜单中可以访问这个页面。
图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集成插件;这样的话该名称极有可能被改掉)。
确保选中的是“Empty
Plugin”选项,而不是任何插件模板;否则,您将得到一个毫无用处的顶级插件类,如果您创建了该类之后希望删掉它,那么它可以被安全地删除。
把
hsqldb.jar从您的HSQLDB安装拷贝到项目目录中,并将其添加到项目的Runtime。
您可以使用PDEPluginManifest
Editor或者简单地拷贝清单1中的内容来完成这项工作。
清单1.用于hsqldb.core插件的plugin.xml清单文件
<?
xmlversion="1.0"encoding="UTF-8"?
><pluginid="hsqldb.core"name="HsqldbCorePlug-in"version="0.0.1"provider-name="FernandoLozano(http:
//www.lozano.eti.br)"><runtime><libraryname="hsqldb.jar"><exportname="*"/></library></runtime></plugin>
添加Workbench扩展
接下来,创建名为hsqldb.ui的第二个插件项目。
这个项目将为插件组的第一修订本包含所有的Eclipse扩展:
包含三个操作的一个操作集、与
*.sql文件相关的对象作用,以及一个属性页面。
将其主类(Plugin类)命名为PluginUi,并接受包的默认名称
hsqldb.ui。
使用PluginManifestEditor打开plugin.xml文件,并选择Extensions选项卡。
将所分配菜单更名为
HSQLDB并改变示范操作,使其显示标签“RunsHSQLDBDatabaseManager”。
向带有标签“StopsHSQLDB
databaseserver”和“StartsHSQLDBdatabaseserver”的同一个actionSet添加另外两个操作,并为每个操作提供惟一的操作
ID和实现类。
请注意,上述操作将以与创建时相反的顺序(即与在插件清单文件中出现的顺序相反)显示在菜单和工具栏中。
单击Add按钮,从而使用Extension模板、弹出式菜单和属性页面添加两个新的扩展。
弹出式菜单应该与*.sql文件模式相关联,但是属性页面字段应该通过编程进行设置。
图4显示了PluginManifest编辑器的最终外观,并显示了所有的插件扩展;图5显示了对象分配的属性(注意针对*.sql
文件的过滤器),而图6显示了文件资源弹出式菜单中的“RunSQLScript”操作的属性。
图标在本文的源代码中给出(请参阅参考资料),但是我敢肯定您认识有比这画得更好的图形专家!
图4.清单编辑器上的HSQLDB操作
图5.清单编辑器上的HSQLDB对象分配
图6.清单编辑器上的RunSQLScript操作
在能够给我们的操作添加代码之前,我们需要将这种UI插件与相应的核心插件区别开来,否则它将不能访问HSQLDB类。
转到Plugin
ManifestEditor上的“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"?
><pluginid="hsqldb.ui"name="HsqldbUiPlug-in"version="0.0.1"provider-name="FernandoLozano(http:
//www.lozano.eti.br)"class="hsqldb.ui.PluginUi"><runtime><libraryname="ui.jar"/></runtime><requires><importplugin="org.eclipse.core.resources"/><importplugin="org.eclipse.ui"/><importplugin="hsqldb.core"/><importplugin="org.eclipse.debug.core"/><importplugin="org.eclipse.jdt.launching"/><importplugin="org.eclipse.debug.ui"/></requires><extensionpoint="org.eclipse.ui.actionSets"><actionSetlabel="Hsqldb"visible="true"id="hsqldb.ui.actionSet"><menulabel="Hsql&db"id="hsqldbMenu"><separatorname="dbServerGroup"></separator></menu><actionlabel="RunHsql&DatabaseManager"icon="icons/dbman.gif"tooltip="RunstheHsqldatabasemanager"class="hsqldb.ui.actions.HsqldbDatabaseManagerAction"menubarPath="hsqldbMenu/dbServerGroup"toolbarPath="dbServerGroup"id="hsqldb.ui.actions.HsqldbDatabaseManagerAction"><enablement><pluginStatevalue="activated"id="hsqldb.ui"></pluginState></enablement></action><actionlabel="S&topHsqldb"icon="icons/stop.gif"tooltip="StopstheHsqldatabaseserver"class="hsqldb.ui.actions.HsqldbStopAction"menubarPath="hsqldbMenu/dbServerGroup"toolbarPath="dbServerGroup"id="hsqldb.ui.actions.HsqldbStopAction"><enablement><pluginStatevalue="activated"id="hsqldb.ui"></pluginState></enablement></action><actionlabel="&StartHsqldb"icon="icons/start.gif"tooltip="StartstheHsqldatabaseserver"class="hsqldb.ui.actions.HsqldbStartAction"menubarPath="hsqldbMenu/dbServerGroup"toolbarPath="dbServerGroup"id="hsqldb.ui.actions.HsqldbStartAction"><enablement><pluginStatevalue="installed"id="hsqldb.ui"></pluginState></enablement></action>&l
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Eclipse HSQLDB 将关系数据库服务器嵌入到 关系 数据库 服务器 嵌入