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. win10 downloader.exe 修复方法

    由于系统更新是和系统密切相关的,在日常使用中某些系统文件如果出现损坏,同样会导致系统更新无法成功安装.如果在使用Windows 10时可以成功下载更新,但是安装的时候出错,此时就需要对系统文件进行检查 ...

  2. flask框架中勾子函数的使用

    在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接: 在请求开始时,根据需求进行权限校验: 在请求结束时,指定数据的交互格式: 为了让每个视图函数避免编 ...

  3. APUE学习笔记——11 线程同步、互斥锁、自旋锁、条件变量

    线程同步     同属于一个进程的不同线程是共享内存的,因而在执行过程中需要考虑数据的一致性.     假设:进程有一变量i=0,线程A执行i++,线程B执行i++,那么最终i的取值是多少呢?似乎一定 ...

  4. Python面向对象 --- 新旧式类、私有方法、类属性和类方法、静态方法

    一.Python面向对象中的新旧式类 1)新式类(推荐使用):在定义类时,类后边括号里要继承基类(object).在python3.x中若没有指定父类,会默认使用的是object作为基类:在pytho ...

  5. Linux:grub密码设置与修改

    grub密码设置与修改 默认GRUB启动参数可以的进入单用户模式从而修改root密码,如果想要给GRUB菜单设置密码,可以修改/etc/grub.conf文件 (/boot/grub/grub.con ...

  6. React状态管理之redux

    其实和vue对应的vuex都是差不多的东西,这里稍微提一下(安装Redux略过): import { createStore, combineReducers, applyMiddleware } f ...

  7. easyUI---分页插件

    设置 //分页组件 $('#detailLayer .detailPag').pagination({ pageNumber: 1, pageSize: 10, total: result.Total ...

  8. CUDA Samples: green ball

    以下CUDA sample是分别用C++和CUDA实现的生成的绿色的球图像,并对其中使用到的CUDA函数进行了解说,code参考了<GPU高性能编程CUDA实战>一书的第五章,各个文件内容 ...

  9. MQTT再学习 -- 漫谈MQTT协议

    先占楼,稍后再讲.先搭建好MQTT服务器和客户端

  10. Windbg 调试工具32位/64位版本下载

    最新的Windbg调试工具32位/64位版本越来越不好下载了,这里通过CSDN的渠道给大家一个下载地址,帮助大家更好下载工具: https://github.com/EasyDarwin/Tools/ ...