hsqldb数据库是一款纯Java实现的开源免费数据库,相对其他数据库来说,体积非常小,使用方便,非常利于在测试环境中使用,无需复杂的数据库配置。
 
hsqldb数据库引擎有几种服务器模式:Server模式,WebServer模式,Servlet模式,Standalone模式,Memory-Only模式。
 
其中最常用的要数Server模式了,首先需要从网站从http://www.hsqldb.org/下载一个hsqldb的稳定版本,当前稳定版本是2.3.2,启动Server模式就类似启动mysql,oracle数据库一样,数据库启动后就作为一个系统服务存在,此时就可以使用数据库工具通过jdbc的方式访问,启动脚本类似:
 
java -cp hsqldb.jar org.hsqldb.Server -database.0 ./db/test -dbname.0 test
 
后面的参数含义如下,-database.index后面接数据库文件(如果当前系统中并不存在该数据文件,就会默认新建一个空文件,支持相对路径的方式,本例子中就会将数据文件建立在相对文件夹db中); -database.index后面接该index数据库的名称(访问数据库时会使用到该名称)。
 
由于启动hsqldb时可以看出,使用了index,在一次启动的过程中,就可以同时启动多个数据库实例。
 
其他模式并不是很常用,但是可以稍微了解一下。比如WebServer模式就是Server模式的扩展,支持http协议;Servlet模式可以允许通过Servlet容器来访问数据库;Standalone模式不能通过网络来访问数据库,主要在一个JVM中使用。
 
hsqldb的zip包中自带了一个简单方便的数据库管理工具,Swing界面的DatabaseManagerSwing,该工具可以通过jdbc访问多种数据库(不仅限于hsqldb哦,还可以连接MySQL,Oracle等数据库),通过运行以下的命令可以打开主界面来访问数据库:
 
java -cp hsqldb.jar org.hsqldb.util.DatabaseManagerSwing
 
打开后主界面如下:


 由于我们是以Server模式启动的,需要选择HSQL Database Engine Server模式启动:


 
启动的Server默认用户是SA,缺省密码为空,连接成功后,就可以查看到该数据库中的所有数据表,并可以通过执行sql的方式查看数据:


 
我们在测试的是一个简单的web项目,在测试场景中频繁启动hsqldb比较麻烦。既然hsqldb是一个非常轻量级的文件数据库,我们可以将hsqldb的启动绑定在Web容器的生命周期中。
 
Web应用中的监听器可以实现这一目标,ServletContextListener的实现类能够帮助监听ServletContext一生中的两个关键事件:初始化以及销毁,能够帮助我们:
 
  • 在容器初始化是得到通知,并获得上下文初始化对象,并启动hsqldb数据库;
  • 容器销毁时,新建hsqldb连接,关闭hsqldb数据库;
 
实现后的Listener类似如下(本例子中硬编码,建议将其配置到web.xml中的content-param中):
public class HsqlDbListener implements ServletContextListener {

    private static final Logger LOG = Logger.getLogger(HsqlDbListener.class);

    @Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
LOG.info("start hsql db server...");
startServer();
} /**
* java -cp hsqldb.jar org.hsqldb.Server -database.0 testdb -dbname.0 test
*/
private void startServer() {
Server server = new Server();
server.setDatabaseName(0, "test");
server.setDatabasePath(0, "/Users/mazhiqiang/develop/server/hsqldb-2.3.2/hsqldb/lib/testdb");
server.setPort(9002);
server.setSilent(true);
server.setTrace(true);
server.start();
} @Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
try {
stopServer();
} catch (BusinessException e) {
throw new BusinessRuntimeException(e);
}
LOG.info("hsql db server stopped.");
} private void stopServer() throws BusinessException {
Connection connection = null;
try {
Class.forName("org.hsqldb.jdbcDriver");
connection = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/test");
Statement statement = connection.createStatement();
statement.execute("SHUTDOWN;");
} catch (ClassNotFoundException e) {
throw new BusinessException(e);
} catch (SQLException e) {
throw new BusinessException(e);
}
}
 
并将该Listener配置到web.xml中,就可以跟随上下文一起启动。
 
 
<listener>
<listener-class>xxx.HsqldbListener</listener-class>
</listener>
 
 
 
 
 
 
 
 
 
 
 
 

hsqldb简单使用总结的更多相关文章

  1. Spring JdbcTemplate

    参考链接: https://my.oschina.net/u/437232/blog/279530 http://jinnianshilongnian.iteye.com/blog/1423897 J ...

  2. Spring JdbcTemplate 方法详解

    JdbcTemplate主要提供以下五类方法: execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句: update方法及batchUpdate方法:update方法用于执行新增.修 ...

  3. (转)Spring JdbcTemplate 方法详解

    Spring JdbcTemplate方法详解 文章来源:http://blog.csdn.net/dyllove98/article/details/7772463 JdbcTemplate主要提供 ...

  4. Spring JdbcTemplate方法详解

    JdbcTemplate主要提供以下五类方法: execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句: update方法及batchUpdate方法:update方法用于执行新增.修 ...

  5. JdbcTemplate主要提供以下五类方法:

    execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句: update方法及batchUpdate方法:update方法用于执行新增.修改.删除等语句:batchUpdate方法用于执 ...

  6. JdbcTemplate的主要用法

    JdbcTemplate主要提供以下五类方法: execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句: update方法及batchUpdate方法:update方法用于执行新增.修 ...

  7. 开涛spring3(7.2) - 对JDBC的支持 之 7.2 JDBC模板类

    7.2  JDBC模板类 7.2.1  概述 Spring JDBC抽象框架core包提供了JDBC模板类,其中JdbcTemplate是core包的核心类,所以其他模板类都是基于它封装完成的,JDB ...

  8. jdbcTemplete(转)

    文章来源:http://blog.csdn.net/dyllove98/article/details/7772463 JdbcTemplate主要提供以下五类方法: execute方法:可以用于执行 ...

  9. (转)JDBC模板类。

    Spring JDBC抽象框架core包提供了JDBC模板类,其中JdbcTemplate是core包的核心类,所以其他模板类都是基于它封装完成的,JDBC模板类是第一种工作模式. JdbcTempl ...

随机推荐

  1. 【LeetCode 110_二叉树_遍历】Balanced Binary Tree

    解法一:From top to bottom int treeHeight(TreeNode *T) { if (T == NULL) ; ; } bool isBalanced(TreeNode* ...

  2. 20165202 实验一 Java开发环境的熟悉

    一.实验内容及步骤 (一)使用JDK编译.运行简单的Java程序 建立"自己学号exp1"的目录 mkdir 20165202exp1 进入目录 cd 20165202exp1 在 ...

  3. zabbix_agent中使用.pgpass

    在配置zabbix过程中,使用了.pgpass 原理: psql -h 192.168.5.XXX -p 5433 -d mydb -U postgres 这个时候要输入密码:user_test 但是 ...

  4. React-Native进阶_1.抽取样式和组件

    组织应用的样式和组件 就像抽取工具类一样,放在单独的文件中,在要使用的地方去导入调用即可. 1.导出样式 Style 样式可以单独写在一个JavaScript文件中,然后导出给其他JavaScript ...

  5. Java之引用类型分析(SoftReference/WeakReference/PhantomReference)

    引言: 即使对于Java的很多老鸟来说,如果忽然问他引用的类型,大概率是一脸茫然,不知所措的-.Java中的引用还分类型,神马情况??? 本文将针对这些类型进行分析,帮助您一文知所有类型. Java的 ...

  6. Swift 3 点击屏幕任意位置隐藏键盘

    func hideKeyboardWhenTappedAround() { let tap: UITapGestureRecognizer = UITapGestureRecognizer(targe ...

  7. iOS通讯录相关知识-浅析

    本文来自于:贞娃儿的博客  http://blog.sina.com.cn/zhenwawaer  在开发一些应用中,我们如果需要iPhone设备中的通讯录信息.或者,需要开发通讯录相关的一些功能.那 ...

  8. 【测试技术】websocket-client

    Websocket Client 继续上周的议题.因为我不会写go,不会写websocket客户端,导致整个测试过程我是个完美的酱油党.上周我终于把客户端服务写好了. 选择Websokcet框架 现在 ...

  9. Base64编码的 换行 转义

    用Base64编码的时候如果出现\n 之类的字符,java中转义. 当字符串过长(一般超过76)时会自动在中间加一个换行符,字符串最后也会加一个换行符.导致和其他模块对接时结果不一致. 解决方法:将  ...

  10. 在eclipse中使用git clone 别人共享在Github的代码和上传到自己的仓库!

    原文地址:http://www.itdaan.com/blog/2014/10/24/ff5e03b5cefef19e1b6fbb7b49809846.html1.在eclipse中安装git:打开e ...