hsqldb数据库要怎么用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hsqldb数据库要怎么用相关的知识,希望对你有一定的参考价值。

怎样将hsqldb服务器启动起来。还有在里面查询数据库内容的代码怎么写?

Hsqldb是一个开放源代码的JAVA数据库,其具有标准的SQL语法和JAVA接口,它可以自由使用和分发,非常简洁和快速的。具有Server模式,进程内模式(In-Process)和内存模式(Memory-Only)三种。运行Hsqldb需要hsqldb.jar包, 它包含了一些组件和程序。每个程序需要不同的命令来运行。它位于项目的lib目录下,在介绍这些模式之前需要了解一些Hsqldb所涉及的一些文件。每个Hsqld数据库包含了2到5个命名相同但扩展名不同的文件,这些文件位于同一个目录下。例如,名位"test"的数据库包含了以下几个文件:
•test.properties
•test.script
•test.log
•test.data
•test.backup
properties文件描述了数据库的基本配置。 script文件记录了表和其它数据库对象的定义。log文件记录了数据库最近所做的更新。data文件包含了cached(缓冲)表的数据,而backup文件是将data文件压缩备份,它包含了data文件上次的最终状态数据。所有这些文件都是必不可少的,千万不可擅自删除。但如果你的数据库没有缓冲表(cached table),test.data和test.backup文件是不会存在。
参考技术A 百度百科:http://baike.baidu.com/view/2194167.htm
官网:http://hsqldb.org/
中文文档作者博客:http://hsqldb.bokee.com/(推荐)
数据库环境配置和使用首先从http://www.hsqldb.org/下载一个hsqldb的稳定版本,解压后可以浏览解压目录下的index.html,它描述了各个目录所包含内容,在doc段里有一个重要的链接User Guide: index.html,有空好好研究吧!

数据库实例创建在hsqldb的管理中,如果启动的数据库文件不存在,就新建该数据库文件。
Hsldb启动Hsqldb的启动模式有三种主要模式,其他参见User Guide:
l Server

该模式就像启动mysql、oracle等数据库一样,数据库启动后作为一个服务存在,其他数据库工具可以通过jdbc的方式访问他,这是我们最熟悉的模式。启动脚本如下:
java -cp hsqldb.jar org.hsqldb.Server -database.0 ./db/test -dbname.0 test

后面参数:
-database.n 数据库文件(其他数据库中对应:数据库实例)地址,支持相对路径,注意使用反斜杠
-dbname.n 数据库文件的访问同义词,就是用这个名称访问数据库的
server模式jdbc访问方式:
Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:9002/test", "sa", "");

可以启动多个数据库文件,例如:
java -cp hsqldb.jar org.hsqldb.Server -database.0 ./db/test0 -dbname.0 test0 -database.1 ./db/test1 -dbname.1 test1

l In-Process (Standalone)

该模式更接近于文件型数据库这个概念,当你访问时他就启动,这种模式访问速度最快,缺点是只能当前访问线程使用,其他数据库工具不能同时访问。例如jdbc访问:
Connection c = DriverManager.getConnection("jdbc:hsqldb:file:/opt/db/testdb", "sa", "");

l In-Memory

顾名思义,内存中的数据库,你所做的数据库ddl、dml不会写入磁盘,也是当你访问时他就启动。例如jdbc访问:
Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:aname", "sa", "");

Hsqldb 管理工具hsqldb.jar中自带了一个数据库管理工具:DatabaseManagerSwing(Swing界面,还有一个是Awt界面的:DatabaseManager),该工具可以通过jdbc访问多种数据库。
我们使用server模式启动hsqldb数据库,然后运行下列命令:
java -cp hsqldb.jar org.hsqldb.util.DatabaseManagerSwing

就可打开主界面

连接时注意选择:Type,应该是HSQL Database Engine Server

对于第一次使用可以使用它自带的功能,创建一些测试表,挺好的吧:

好了你就可以写些语法数据库语法了:

你可以直接关闭它但数据库不受影响,仍然启动着。

Hsldb关闭对于任何一种启动模式,都可以在输入sql脚本的状态输入:SHUTDOWN 或 SHUTDOWN COMPACT 语法来关闭数据库。
对于In-process和In-memory这两种模式只要所有的连接关闭了,数据库也就关闭了。

Server模式参数设置在server模式下可以设置一些参数,主要的例如访问端口,可以参见User Guide的第四章高级属性,一般我们可以在启动脚本的目录下编辑一个server.properties,内容如下:
server.port=9002

server.trace=true

Sqltool工具使用

在目录src\org\hsqldb\sample下有一个sqltool.rc文件,将其拷贝到工具使用命令目录中,修改如下片断:
urlid test

url jdbc:hsqldb:hsql://localhost:9002/test

username sa

password

其中urlid就是启动hsqldb的参数-dbname.0 test

然后使用如下命令:
java -jar hsqldb.jar --sql "select * from customer" --rcfile sqltool.rc test

大家可以通过“java -jar hsqldb.jar –help”看看其他的参数

好了给大家一个整理的压缩包,别忘了装jdk1.4

在web应用中嵌入hsqldb
写一个Listener
将hsqldb嵌入到web应用首要解决的问题是数据库的启动和关闭问题,参考springside项目的方法加入一个容器级的Listener,代码如下:
import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Statement;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

import org.apache.commons.lang.StringUtils;

import org.apache.log4j.Logger;

import org.hsqldb.Server;

/**

* 该类的职责是在WebApp启动时自动开启HSQL服务. 依然使用Server方式,不受AppServer的影响.

*

* @author frank

* @author calvin

*/

public class HsqlListener implements ServletContextListener

protected Logger logger = Logger.getLogger(getClass());

/*

* (非 Javadoc)
*

* @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)

*/

public void contextInitialized(ServletContextEvent sce)

logger.info(" ============= HsqlListener initialize...");

// 获得数据库文件访问路径
String path = getDbPath(sce);

if (!path.endsWith("/"))

path = path + "/";

if (StringUtils.isEmpty(path))

logger.info(" ============= Can't get hsqldb.path from web.xml Context Param");

return;



logger.debug("hsqldb_path:" + path);

// 数据库文件名
String dbName = sce.getServletContext().getInitParameter("hsql.dbName");

if (StringUtils.isEmpty(dbName))

logger.info(" ============= Can't get hsqldb.dbName from web.xml Context Param");

return;



// 数据库访问端口
int port = -1;

try

port = Integer.parseInt(sce.getServletContext().getInitParameter("hsql.port"));

catch (Exception e)

e.printStackTrace();

return;



// 启动数据库
startServer(path, dbName, port);



/**

* 获得数据库文件访问路径
*

* @param sce

* @return

*/

private String getDbPath(ServletContextEvent sce)

String path = sce.getServletContext().getInitParameter("hsql.dbPath");

if (path.startsWith("user.home"))

path = path.replaceFirst("\\user.home\\", System.getProperty("user.home").replace('\\', '/'));



if (path.startsWith("webapp.root"))

path = path.replaceFirst("\\webapp.root\\", sce.getServletContext().getRealPath("/").replace('\\', '/'));



return path;



/**

* 启动数据库
*

* @param dbPath

* @param dbName

* @param port

*/

private void startServer(String dbPath, String dbName, int port)

Server server = new Server();

server.setDatabaseName(0, dbName);

server.setDatabasePath(0, dbPath + dbName);

if (port != -1)

server.setPort(port);

server.setSilent(true);

server.setTrace(true);

server.start();

logger.info(" ============= hsqldb started...");

// 等待Server启动
try

Thread.sleep(800);

catch (InterruptedException e)

e.printStackTrace();





/*

* (非 Javadoc)
*

* @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)

*/

public void contextDestroyed(ServletContextEvent sce)

logger.info(" ============= HsqlListener destroyed...");

Connection conn = null;

try

Class.forName("org.hsqldb.jdbcDriver");

conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:9002/weed", "sa", "sa");

Statement stmt = conn.createStatement();

stmt.executeUpdate("SHUTDOWN;");

logger.info(" ============= hsqldb shutdown...");

catch (Exception e)

e.printStackTrace();







增加web.xml配置web.xml配置增加如下:


<!--HSQLDB Listener的参数,随WebApp启动停止的Listener

user.home System.getProperty("user.home")

webapp.root servletContext.getRealPath("/")

-->

<context-param>

<param-name>hsql.dbPath</param-name>

<param-value>webapp.root/WEB-INF/dbms/db</param-value>

</context-param>

<context-param>

<param-name>hsql.dbName</param-name>

<param-value>weed</param-value>

</context-param>

<context-param>

<param-name>hsql.port</param-name>

<param-value>9002</param-value>

</context-param>



<!--

控制HSQLDB随Web App 启动停止

-->

<listener>

<listener-class>test.HsqlListener</listener-class>

</listener>

好了,你现在可以像访问mysql、oracle等其他数据库一样配置jdbc连接访问hsqldb了,在HsqlListener中有一个类org.hsqldb.Server,有空你可以研究一下他的源码。本回答被提问者采纳

以上是关于hsqldb数据库要怎么用的主要内容,如果未能解决你的问题,请参考以下文章

HSQLDB 内存消耗

HSQLDB 无法使用 android 连接到 db 脚本?

IN 在语句 DB2 等价于 HSQLDB

如何将多个数据库( hsqldb、mysql )与单独文件中的 DB 设置连接起来

使用 HSQL DB 测试插入所有 Oracle 查询

HSQLDB服务器ACL不生效