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. Axure RP 7.0 注册码

    2016.01.25安装可用   Axure RP 7.0 注册码  用户名:axureuser  序列号:8wFfIX7a8hHq6yAy6T8zCz5R0NBKeVxo9IKu+kgKh79FL6 ...

  2. sar工具使用详细介绍

    一:命令介绍:参考资料:http://linux.die.net/man/1/sar sar(System ActivityReporter系统活动情况报告)是目前Linux上最为全面的系统性能分析工 ...

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

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

  4. 使用strdup 和 _strdup

    在重构旧的C代码里,使用了这个函数, pNew = new OBJECTDESC; sscanf(buf, "%x", &i); pNew->wObjectID = ...

  5. HDU 3378

    http://acm.hdu.edu.cn/showproblem.php?pid=3378 规则去玩三国杀就理解了 纯模拟 注意的点:有已经分出胜负但还在杀的情况出现,所以要每次杀操作前判断是否分出 ...

  6. ExtJS小技巧

    一.从form中获取field的三个方法: 1.Ext.getCmp('id'); 2.FormPanel.getForm().findField('id/name'); 3.Ext.get('id/ ...

  7. 读文件名,shell

    参考文献:(忘了哪个笔记了)http://www.docin.com/p-871820919.html

  8. vuex(二)getters

    getters: 有时候,我们需要对state的数据进行筛选,过滤.这些操作都是在组件的计算属性进行的.如果多个组件需要用到筛选后的数据,那我们就必须到处重复写该计算属性函数:或者将其提取到一个公共的 ...

  9. ajax完成团队信息异步添加【实际项目】

    第一:ajax往后台传参如何串(目前理解是json数组直接传给对象) 第二:ajax返回的数值通过PrintWriter.print方法返回 [参考前台页面关于团队信息是如何实现的] 参考页面user ...

  10. [Luogu4233]射命丸文的笔记

    luogu description 对于\(x\in[1,n]\)求\(x\)点强联通竞赛图中的哈密顿回路的期望个数膜\(998244353\). \(n\le10^5\) sol 首先\(n\)点竞 ...