锁定老帖子 主题:Hsqldb简介和基本使用
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-11
Hsqldb是一个开放源代码的JAVA数据库,其具有标准的SQL语法和JAVA接口,它可以自由使用和分发,非常简洁和快速的。具有Server模式,进程内模式(In-Process)和内存模式(Memory-Only)三种。运行Hsqldb需要hsqldb.jar包, 它包含了一些组件和程序。每个程序需要不同的命令来运行。它位于项目的lib目录下,目前的版本是1.8.0.5。官方的下载地址是:http://prdownloads.sourceforge.net/hsqldb/hsqldb_1_8_0_5.zip?download
properties文件描述了数据库的基本配置。 script文件记录了表和其它数据库对象的定义。log文件记录了数据库最近所做的更新。data文件包含了cached(缓冲)表的数据,而backup文件是将data文件压缩备份,它包含了data文件上次的最终状态数据。所有这些文件都是必不可少的,千万不可擅自删除。但如果你的数据库没有缓冲表(cached table),test.data和test.backup文件是不会存在。 接下来我们对Hsqldb的三种模式进行简单介绍,同时包括部分工具的启动的方式。 <o:p>一、 Server模式</o:p>Server模式提供了最大的可访问性。应用程序(客户端)通过Hsqldb的JDBC驱动连接服务器。在服务器模式中,服务器在运行的时候可以被指定为最多10个数据库。根据客户端和服务器之间通信协议的不同,Server模式可以分为以下三种: 1、 Hsqldb Serve这种模式是首选的也是最快的。它采用HSQLDB专有的通信协议。启动服务器需要编写批处理命令。Hsqldb提供的所有工具都能以java class归档文件(也就是jar)的标准方式运行。假如hsqldb.jar位于相对于当前路径的../lib下面。我们的命令将这样写: java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 mydb -dbname.0 demoDB 现在你可能会疑惑,[-database.0 ]、 [dbname.0]为什么在后面加[0]。_... ...我们不是在前面说服务模式运行的时候可以指定10个数据库吗,如有多个数据库,则继续写命令行参数-database.1 aa -dbname.1 aa -database.2 bb-dbname.2 bb ... ... 新建文本文件保存上面命令,文件名可以随意,将后缀名改成bat,然后直接执行批处理文件即可。在以后介绍的执行启动工具的命令采用同样方法。 上面启动服务器的命令启动了带有一个(默认为一个数据库)数据库的服务器,这个数据库是一个名为"mydb.*"文件,这些文件就是mydb.Properties、mydb.script、mydb.log等文件。其中demoDB是mydb的别名,可在连接数据库时使用。<o:p></o:p> <o:p>2、 Hsqldb Web Server</o:p><o:p> 这种模式只能用在通过HTTP协议访问数据库服务器主机,采用这种模式唯一的原因是客户端或服务器端的防火墙对数据库对网络连接强加了限制。其他情况下,这种模式不推荐被使用。</o:p> <o:p> 运行web服务器的时候,只要将刚才命令行中的主类(main class)替换成:org.hsqldb.WebServer</o:p><o:p></o:p> 3、 Hsqldb Servlet这种模式和Web Server一样都采用HTTP协议,当如Tomcat或Resin等servlet引擎(或应用服务器)提供数据库的访问时,可以使用这种模式。但是Servlet模式不能脱离servlet引擎独立启动。为了提供数据库的连接,必须将HSQLDB.jar中的hsqlServlet类放置在应用服务器的相应位置。 Web Server和Servlet模式都只能在客户端通过JDBC驱动来访问。Servlet模式只能启动一个单独的数据库。请注意做为应用程序服务器的数据库引擎通常不使用这种模式。<o:p></o:p> 连接到以Server模式运行的数据库当HSQLDB服务器运行时,客户端程序就可以通过hsqldb.jar中带有的HSQLDB JDBC Driver连接数据库。 java 代码
注:hsqldb的默认用户是sa密码为空。修改默认密码的方法我们将在工具使用部分做出介绍。 <o:p></o:p> 二、 In-Process模式In-Process模式又称Standalone模式。这种模式下,数据库引擎作为应用程序的一部分在同一个JVM中运行。对于一些应用程序来说, 这种模式因为数据不用转换和通过网络的传送而使得速度更快一些。其主要的缺点就是默认的不能从应用程序外连接到数据库。所以当应用程序正在运行的时候,你不能使用类似于Database Manager的外部工具来查看数据库的内容。在<st1:chsdate isrocdate="False" w:st="on" year="1899" day="30" islunardate="False" month="12">1.8.0</st1:chsdate>版本中,你可以从同一个JVM的一个线程里面来运行一个服务器实例,从而可以提供外部连接来访问你的In-Process数据库。 推荐的使用In-Process模式方式是:开发的时候为数据库使用一个HSQLDB 服务器实例,然后在部属的时候转换到In-Process内模式。 一个In-Process模式数据库是从JDBC语句开始启动的,在连接URL中带有指定的数据库文件路径作为JDBC的一部分。例如,假如数据库名称为testdb,它的数据库文件位于与确定的运行应用程序命令相同的目录下,下面的代码可以用来连接数据库: 数据库文件的路径格式在Linux主机和Windows主机上都被指定采用前斜线("/")。所以相对路径或者是相对于相同分区下相同目录路径的表达方式是一致的。使用相对路径的时候,这些路径表示的是相对于用于启动JVM的shell命令的执行路径。 三、Memry-Only数据库
四、 工具的使用
现在对这个简洁的登录界面做个简单的介绍*_*
在右上方的空白区域输入set password "newpassword" 点击执行即可。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-05-11
楼主似乎没粘贴完...
http://hsqldb.org/web/hsqlDocsFrame.html 内存协议加了个mem: 一个server支持10个schema(or database) |
|
返回顶楼 | |
发表时间:2007-05-11
刚使用javaeye的博客,还不适应,终于把整篇文章写完了。
:arrow : |
|
返回顶楼 | |
发表时间:2007-05-12
看下hsqldb对于理解数据库和jdbc有很好的帮助.
其体积小巧,一些概念也设计得很不错. 只是有些类太大了..(不过还算过得去的说) |
|
返回顶楼 | |
发表时间:2007-05-13
问一下楼主 hsqldb的script文件是怎么生成的?手工敲的呢还是有什么工具导出的
还是用的hibernate的hbm2ddl? |
|
返回顶楼 | |
发表时间:2007-05-14
HSQLDB的script文件也就是数据库的主文件,你用记事本打开就可以看到里面都是一些sql语句。hsqldb是以纪录脚本的形式保存数据的,由此可以看出script文件肯定不是用手工敲的。它是我们运行hsqldb数据库后自动生成的。
当然这里更加没有Hibernate什么事情了。因为这个文件和Hibernate没有任何关系。 |
|
返回顶楼 | |
发表时间:2007-05-14
lunch 写道 HSQLDB的script文件也就是数据库的主文件,你用记事本打开就可以看到里面都是一些sql语句。hsqldb是以纪录脚本的形式保存数据的,由此可以看出script文件肯定不是用工敲的。它是我们运行hsqldb数据库后自动生成的。
当然这里更加没有Hibernate什么事情了。因为这个文件和Hibernate没有任何关系。 test.script CREATE SCHEMA PUBLIC AUTHORIZATION DBA CREATE MEMORY TABLE USER(USER_ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL,USER_NAME VARCHAR(80) NOT NULL,AGE INTEGER , CONSTRAINT PK_USER PRIMARY KEY(USER_ID)) CREATE MEMORY TABLE custom_order(order_id INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL,custom_id INTEGER NOT NULL,receiver_name varchar(16),receiver_addr varchar(256),receiver_phone varchar(16),receiver_postalcode varchar(8),receiver_email varchar(64),invoice_info varchar(1024),order_state char(1),order_date timestamp, CONSTRAINT PK_order PRIMARY KEY(order_id)) CREATE USER SA PASSWORD "" GRANT DBA TO SA SET WRITE_DELAY 20 SET SCHEMA PUBLIC INSERT INTO USER VALUES(1,'XULY',27) 这些create table ,insert等语句是怎么产生的? |
|
返回顶楼 | |
发表时间:2007-05-14
因为你执行了对应的操作啊。
当你启动数据库执行创建表,增加数据的时候就会生成对应的sql语句。删除操作不会记录在script文件中。 当然这里的创建操作可能是由Hibernate通过配置文件自动创建的,也可能是你自己书写sql语句(create table xxx ...)等来实现操作的。但是Hsqldb都会自动在xx.script文件中追加对应的sql语句,前提是你正确的结束本次对数据库的操作。如果没有以正确的方式退出hsqldb那么会增加*.lck和*.log文件,来记录你的操作,直到你正确保存数据并且退出数据库,这两个文件才会消失。 正确的退出数据库是执行shutdown命令 |
|
返回顶楼 | |
发表时间:2007-05-14
xly_971223 写道 问一下楼主 hsqldb的script文件是怎么生成的?手工敲的呢还是有什么工具导出的
还是用的hibernate的hbm2ddl? 手工敲....... script就是db文件 |
|
返回顶楼 | |
发表时间:2007-05-14
这段时间将陆续多增加几篇关于HSQLDB的文章。
|
|
返回顶楼 | |