HsqlDB
前段时间使用阿里云呼叫中心,给的demo中使用了hsqldb,对于数据的存储和获取很是方便,不用本地做任何的改动。查阅资料,看到了原作者写下的很好的一片文章,特整理过来以供自己熟悉和理解使用。
原文地址:
https://www.cnblogs.com/zdxster/p/5345194.html
1、简介
hsql数据库是一款纯Java编写的免费数据库,许可是BSD-style的协议,如果你是使用Java编程的话,不凡考虑一下使用它,相对其他数据库来说,其体积小,才563kb。仅一个hsqldb.jar文件就包括了数据库引擎,数据库驱动, 还有其他用户界面操作等内容。在Java开源世界里,hsql是极为受欢迎的(就Java本身来说),JBoss应用程序服务器默认也提供了这个数据库引 擎。由于其体积小的原因,又是纯Java设计,又支持SQL99,SQL2003大部分的标准,所以也是作为商业应用程序展示的一种选择。请到以下地址下载hsql
http://prdownloads.sourceforge.net/hsqldb/hsqldb_1_7_3_3.zip?download
2、四种使用模式介绍
一个db 数据库会包含如下文件:
- mydb.properties
- mydb.script
- mydb.log
- mydb.data
- mydb.backup
- mydb.lck
- mydb.properties 文件包含关于数据库的一般设置.
- mydb.script 文件包含表和其它数据库,插入没有缓存表的数据.
- mydb.log 文件包含当前数据库的变更.
- mydb.data 文件包含缓存表的数据
- mydb.backup 文件是最近持久化状态的表的数据文件的压缩备份文件
- 当操作db 数据库的时候, mydb.log 用于保存数据的变更. 当正常SHUTDOWN,这个文件将被删除. 否则(不是正常shutdown),这个文件将用于再次启动的时候,重做这些变更.
- mydb.lck 文件也用于记录打开的数据库的事实, 正常SHUTDOWN,文件也被删除.在一些情况下,mydb.data.old 文件会被创建,并删除以前的.
所有以上这个文件都是必要的,不能被删除.如果数据库没有缓存表,mydb.data 和mydb.backup 文件将不会存在.另外,除了以上文件HSQLDB 数据库可以链接到任何文本文件,比如cvs 文件.
2.1 内存(Memory-Only)模式
所有的数据都将在内存中完成,如果程序退出,则相应的数据也将同时被销毁。不需要额外启动
连接JDBC的实例为:jdbc:hsqldb:mem
:dbname
Connection connection =DriverManager.getConnection("jdbcUriName","username","password");
2.2 进行(In-Process/Standlone)模式
不能通过网络来访问数据库,主要是在一个JVM中使用,那样的话,访问的速度会更加快。此模式从应用程序启动数据库,由于所有的数据都将写到文件中,所以,即使程序退出,数据也不会被销毁不需要额外启动
连接 JDBC 的实例为:jdbc:hsqldb:file
:**
jdbc:hsqldb:file:/E:/hsqldb/data/dbname // windows
jdbc:hsqldb:file:/opt/db/dbname // Linux
jdbc:hsqldb:file:dbname // 当前项目名下
2.3 服务器(Server)模式
- 首先切换到lib文件夹下,运行
java -cp hsqldb.jar org.hsqldb.Server -database.0 db/mydb -dbname.0 xdb
xdb相当于数据库别名,执行命令后后会在lib目录下生成一个db文件夹,将会在db文件夹下创建一个数据库mydb,别名(用于访问数据库)是xdb,如果存在mydb数据库,将会打开它。
- 在lib文件夹目录下运行数据库界面操作工具:
java -cp hsqldb.jar org.hsqldb.util.DatabaseManager
在Type 选项里选上相应的服务器模式,这里选择HSQL Database Engine Server模式;Driver不用修改;URL修改为jdbc:hsqldb:hsql://localhost/xdb (主要这里xdb
就是上面我们设置的别名);user里设置用户名,第一次登录时,设置的是管理员的用户名,password设置密码。然后点击Ok。
- 第一次运行数据库引擎,创建数据库完,在db文件夹下便会生成properties,script等文件。
package com.util;
import java.sql.*;
public class DBWork {
public static void main(String args[]){
try{
Class.forName("org.hsqldb.jdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/xdb", "sa", "");
System.out.println("conn = " + conn);
} catch(Exception e){
e.printStackTrace();
}
}
}
spring+hibernate中,applicationContext.xml中配置:
<bean
class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
<property name="driverClassName">
<value>org.hsqldb.jdbcDriver</value>
</property>
<property name="url">
<value>jdbc:hsqldb:hsql://localhost/xdb</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value/>
</property>
</bean>
<bean
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" id="sessionFactory">
<property name="dataSource">
<ref local="dataSource"/>
</property>
<property name="mappingResources">
<list>
<value>com/hibernate/UserInfo.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
- 创建bat文件快速运行。
首先在 E:\hsqldbTest 目录下建立两个子目录,data和lib目录,data用来存放数据,lib用来管理jar包。将解压之后的hsqldb中的lib目录下的 hsqldb.jar 文件拷贝到 E:\hsqldbTest\lib 目录下。
在hsqldbTest目录下创建 runServer.bat 文件,其内容为:(winow 下命令格式)
cd ./data
@java -classpath ../lib/hsqldb.jar org.hsqldb.server.Server
保存 runServer.bat 文件,并双击运行该文件,此时回弹出命令行窗口,如下图,表示已启动 HSQLDB 数据库。
再创建 runManager.bat 文件,用来启动图形界面管理工具,其内容为:
cd ./data
@java -classpath ..\lib\hsqldb.jar org.hsqldb.util.DatabaseManager
Recent:将会列出最近的数据库配置
Setting Name: 设置名称,这里不需要填写
Type:选择服务器模式(HSQL Database Engine Server)
Driver:驱动名称,不需要修改
URL:JDBC连接,无需修改
User:用户名,根据需要设置
Password:密码,根据需要设置
另外还可以用 DatabaseManagerSwing 工具启动图形界面。创建 runManagerSwing.bat 文件,内容为
cd ./data
@java -classpath ..\lib\hsqldb.jar org.hsqldb.util.DatabaseManagerSwing
- 创建定制的数据库
首先在 E:\hsqldbTest 目录下创建一个 server.properties(本人实验,不用写这个文件也可以) 文件,文件内容为(注:在实际文件中,删除后面的注释内容):
server.port = 9001 #指定端口号为9001
server.database.0 = file:data/mydb #将在data目录下创建mydb数据库 文件中定义启动的数据库,最多10个
server.dbname.0 = xdb #指定数据库名,jdbc连接时就是用此名称
server.silent = true
cd ./data
@java -classpath ../lib/hsqldb.jar org.hsqldb.server.Server -port 9001 -database.0 file:../data/mydb -dbname.0 xdb
Hsqldb 的主要工具类:
org.hsqldb.util.DatabaseManager
org.hsqldb.util.DatabaseManagerSwing
org.hsqldb.util.Transfer
org.hsqldb.util.QueryTool
org.hsqldb.util.SqlTool
2.4 Web服务器模式
WebServer模式和Server运行模式基本一样,只是支持了Http等协议,主要用于防火墙,默认端口是9001。启动Server,
java -cp hsqldb.jar org.hsqldb.WebServer … 剩余的和上面的一致。
java -cp hsqldb.jar org.hsqldb.WebServer -database.0 testdb -dbname.0 testdbname
2.5 Servlet服务器模式
Servlet模式可以允许你通过Servlet容器来访问数据库