`
philip2k
  • 浏览: 1311 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

在Web项目中初次尝试HSQLDB

    博客分类:
  • java
阅读更多

最近在一个showcase的项目里面使用内存数据库HSQLDB,下面将自己的使用方式做以简单的介绍。

本人是在Web项目中使用HSQLDB的,所以希望数据库能随之Web程序一起启动。由于此Web使用了Spring Framework,因此本人编写了一个小组建用于启动数据库,其代码如下。

 

package com.wanmei.web.dev.showcase.hsqldb.support;

import java.io.File;
import java.util.Set;

import org.hsqldb.Server;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 
 * @author philip
 *
 */
public class LocalHsqldbServerBean {

 private static final Logger logger = LoggerFactory.getLogger(LocalHsqldbServerBean.class);
 
 public static final int DEFAULT_PORT = 9001;
 public static final String DEFAULT_ADDRESS = "127.0.0.1";
 
 private Set<String> databaseNames;
 
 // database server properties
 private String address;
 private int port;
 private boolean silent;
 private boolean trace;
 
 private Server hsqldbServer;
 
 public LocalHsqldbServerBean() {
  super();
  address = DEFAULT_ADDRESS;
  port = DEFAULT_PORT;
  silent = true;
  trace = false;
 }
 
 public void initialize() {
  
  logger.debug("starts to initializing hsqldb server");
  
  final String databaseScriptRootPath = getFileDirectory();
  logger.debug("hsqldb script root path " + databaseScriptRootPath);
  
  hsqldbServer = new Server();
  
  hsqldbServer.setPort(port);
  hsqldbServer.setAddress(address);
  hsqldbServer.setSilent(silent);
  hsqldbServer.setTrace(trace);
  
  setsetDatabaseNames(databaseNames, hsqldbServer, databaseScriptRootPath);
  
  try {
   hsqldbServer.start();
   logger.debug("hsqldb server started, hsqldb server state is " + hsqldbServer.getStateDescriptor());
  } catch (Exception e) {
   logger.error("can not start hsqldb server", e);
   throw new RuntimeException("can not start hsqldb server", e);
  }
  
 }
 
 private void setsetDatabaseNames(Set<String> names, Server server, String scriptPath) {
  
  if (names == null || names.isEmpty()) {
   throw new IllegalArgumentException("can not get database name");
  }
  
  int count = 0;
  
  for (String name : names) {
   logger.debug("setting [" + count++ + "] which database name is '" + name+ "'");
   hsqldbServer.setDatabaseName(count, name);
   hsqldbServer.setDatabasePath(count, scriptPath + name);
  }
 }
 
 private String getFileDirectory() {
  File classDirectory = new File(this.getClass().getResource("/").getPath());
  return classDirectory.getParent() + "/hsqldb/";
 }
 
 public void destory() {
  try {
   hsqldbServer.stop();
   logger.debug("hsqldb server stoped");
  } catch (Exception e) {
   logger.error("can not stop hsqldb server", e);
  }
  
 }

 public Set<String> getDatabaseNames() {
  return databaseNames;
 }

 public void setDatabaseNames(Set<String> databaseNames) {
  this.databaseNames = databaseNames;
 }

 public String getAddress() {
  return address;
 }

 public void setAddress(String address) {
  this.address = address;
 }

 public int getPort() {
  return port;
 }

 public void setPort(int port) {
  this.port = port;
 }

 public boolean isSilent() {
  return silent;
 }

 public void setSilent(boolean silent) {
  this.silent = silent;
 }

 public boolean isTrace() {
  return trace;
 }

 public void setTrace(boolean trace) {
  this.trace = trace;
 }
}

 


在Spring的配置信息中,首先需要初始化HSQLDB,然后才初始化DataSource,Spring配置片段如下。

 

  <bean id="localHsqldbServerBean" class="com.wanmei.web.dev.showcase.hsqldb.support.LocalHsqldbServerBean" lazy-init="false" init-method="initialize" destroy-method="destory">
    <property name="databaseNames">
      <set>
        <value>devshowcase</value>
        <value>student</value>
        <value>bookstore</value>
      </set>
    </property>
    <property name="silent" value="true"/>
    <property name="trace" value="false"/>
  </bean>

  <!-- hsqldb datasource based on c3p0 -->
  <bean id="hsqldb-c3p0-dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" depends-on="localHsqldbServerBean">

    <property name="user" value="SA"/>
    <property name="password" value=""/>
    <property name="driverClass" value="org.hsqldb.jdbcDriver"/>
    <property name="jdbcUrl" value="jdbc:hsqldb:hsql://localhost:9001/devshowcase"/>

    <property name="acquireIncrement" value="${mysql.c3p0.acquireIncrement}"/>
    <property name="initialPoolSize" value="${mysql.c3p0.initialPoolSize}"/>
    <property name="minPoolSize" value="${mysql.c3p0.minPoolSize}"/>
    <property name="maxPoolSize" value="${mysql.c3p0.maxPoolSize}"/>
    <property name="checkoutTimeout" value="${mysql.c3p0.checkoutTimeout}"/>
    <property name="maxIdleTime" value="${mysql.c3p0.maxIdleTime}"/>
    <property name="maxIdleTimeExcessConnections" value="${mysql.c3p0.maxIdleTimeExcessConnections}"/>
  </bean>

 
PS:经过测试此DataSource可以用于Jdbc的操作,也可以用户Hibernate的操作。

当启动了Web项目后,就可以通过HSQLDB自带的Client工具访问HSQLDB数据库了。具体参考方法如下:
1、首先本人将hsqldb.jar文件拷贝到了D:/hsqldb/下
2、登录Windows Command Prompt,并将当前目录切换至D:/hsqldb/下
3、执行java -cp hsqldb.jar org.hsqldb.util.DatabaseManager,此时就可以通过HSQLDB的mini客户端对HSQLDB进行操作了。
4、使用客户端工具创建好需要的表之后,通过HSQLDB客户端UI工具中执行'SHOWDOWN'命令关闭了内存数据库,然后关闭了Web程序。此时在Tomcat目录中的webapp/devshowcase/WEB-INF/HSQLDB/文件夹中可以看到HSQLDB的script文件和properties文件。


方法可能不是很高明但是可以使用,各位有什么好的建议请留言。谢谢各位。

分享到:
评论

相关推荐

    HSQLDB中文帮助文档

    - **环境部署**:讨论了在不同环境中部署HSQLDB的注意事项。 - **内存和磁盘使用**:关于如何优化内存和磁盘使用的方法。 - **管理数据库连接**:提供了管理数据库连接的最佳实践。 - **升级数据库**:介绍了如何...

    hsqldb使用(转载)

    HSQldb是一个轻量级的关系型...HSQldb的灵活性和易用性使其成为开发人员的首选数据库之一,特别是在快速迭代和测试环境中。其强大的特性,如内存数据库、自动创建数据库以及内置的管理工具,都极大地简化了数据库管理。

    HSQLDB中文手册

    ### HSQLDB中文手册知识点概览 #### 一、HSQLDB概述与核心特性 ...总之,HSQLDB是一款功能全面、性能卓越的关系型数据库系统,尤其适合于Java开发环境,无论是学习研究还是实际项目开发,都是一款值得信赖的选择。

    HSQLDB

    HSQLDB 广泛应用于桌面应用、Web应用、单元测试、原型开发等领域。特别是在测试环境中,由于其快速启动和关闭的特点,常被用来代替生产数据库进行功能测试和性能测试。 综上所述,HSQLDB 是一款强大而灵活的开源...

    jbpm4 测试例子(项目中含hsqldb数据库)

    **jbpm4测试例子(项目中含hsqldb数据库)** jbpm4 是一个开源的工作流管理系统,它提供了业务流程管理(BPM)和工作流服务。jbpm4的测试例子是一个很好的学习资源,帮助开发者了解如何在实际项目中集成和使用jbpm4。...

    hsqldb 2.25

    在压缩包`hsqldb-2.2.5`中,包含HSQldb 2.25的所有相关文件,包括jar包和其他资源文件,这些文件可以直接集成到使用JDK 1.5的Java项目中,以实现数据库的连接和操作。 总的来说,HSQldb 2.25是一款专为JDK 1.5设计...

    hsqldb包和使用说明

    在实际使用中,根据项目需求选择合适的HSQldb版本和配置,能够更有效地满足应用的需求。 总的来说,HSQldb是一个功能完备且易于使用的Java数据库解决方案,尤其适合于开发和测试环境。通过阅读提供的中文使用说明,...

    HSQLDB快速连接数据库

    - **约束和索引**:详细阐述了如何在HSQLDB中定义和使用主键、唯一性约束、唯一性索引以及外键约束,并分析了这些约束和索引如何影响查询性能。 - **类型和算术操作**:介绍了HSQLDB支持的各种数据类型,包括整型、...

    hsqldb-2.2.8数据库

    在使用HSQldb-2.2.8时,开发者通常会通过下载解压后的文件,找到对应的JDBC驱动(通常为`hsqldb.jar`),将其添加到项目的类路径中,然后通过JDBC API连接到数据库。HSQldb的配置文件(如`hsqldb.properties`)可以...

    hsqldb-lib.zip

    "hsqldb-lib.zip"这个压缩包就是专门为HSQldb提供这些附加库的集合,以确保HSQldb能更好地与其他软件集成或在特定环境中运行。 在"hsqldb-lib.zip"中,虽然具体的文件列表没有给出,但通常这些额外的JAR文件可能...

    hsqldb demo

    在"hsqldb demo"中,可能包含了一个简单的HSQldb 使用示例,演示如何在Java项目中集成和使用HSQldb。通常,这个示例会涵盖以下步骤: 1. **引入依赖**:在Java项目中,通过Maven或Gradle等构建工具引入HSQldb 的库...

    开源数据库软件hsqldb

    1. **启动HSQldb**:通过java -jar hsqldb.jar命令启动HSQldb服务器,或者在Java代码中直接加载HSQldb库。 2. **连接数据库**:使用JDBC驱动进行连接,如`jdbc:hsqldb:hsql://localhost/test`,其中`test`是数据库...

    HSQLDB 中文文档

    - 将文件放置在项目的类路径中。 ##### 3.2 启动 HSQLDB支持多种运行模式,包括SERVER模式、In-Process(Standalone)模式等。 - **SERVER模式**: - 使用`HsqldbServer`启动服务端。 - 可以通过`...

    HSQLDB数据库

    **正文** HSQLDB(HyperSQL Database)是一个开源的关系型数据库管理系统,因其轻量级、高性能和易用性而受到广大开发者的欢迎。...无论是在学习数据库原理还是在实际项目中,HSQLDB都是一个值得信赖的选择。

    HSQLDB_guide

    1. 开发与测试:在软件开发过程中,HSQLDB常被用于单元测试和集成测试,为开发者提供一个快速、便捷的数据库环境。 2. 小型应用:对于不需要复杂数据库管理功能的小型应用,HSQLDB是一个理想的选择,如桌面应用、Web...

Global site tag (gtag.js) - Google Analytics