`
brofe
  • 浏览: 232955 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HSQL DB 在Web 应用下使用方法

阅读更多
1. 简介

HSQL DB 是一款由Java编写的免费数据库软件,相对其他数据库来说,HSQL DB 具有灵活、小巧(仅690KB)等特点。使用时导入hsqldb.jar即可(http://hsqldb.org)。

2. HSQL DB 服务类

该类含启动、停止HSQL DB数据库服务和得到HSQL DB 数据库连接的方法

package com.brofe.hsqldb.core;

import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hsqldb.Server;

/**
 * HSQLDB 服务提供类 
 * 
 * @author brofe
 * @since Mar 4, 2009
 * @version 1.0
 */
public class HsqldbService {
	
	private static Log logger = LogFactory.getLog(HsqldbService.class);
	
	private static String hsqlUrl = new String("");
	
	private static String hsqlUser = new String("");
	
	private static String hsqlPwd = new String("");
	
	private static String hsqlDBName = new String("");
	
	private static String hsqlDBPath = new String("");
	
	private static String hsqlScriptDir = new String(""); // HSQL 数据库脚本所在目录(最好放置在CLASSPAHT目录下)
	
	private static int hsqlDBPort = 9002;
	
	/**
	 * 初始化默认参数
	 */
	static {
		hsqlScriptDir = "/hsqldb/";
		
		hsqlDBPath = HsqldbService.class.getResource(hsqlScriptDir).getPath();
		hsqlDBName = "default-db";
		
		hsqlUrl = "jdbc:hsqldb:hsql://localhost:" + hsqlDBPort + "/" + hsqlDBName;
		hsqlUser = "sa";
		
		try {
			Class.forName("org.hsqldb.jdbcDriver");
		} catch (Exception e) {
			logger.error("加载 Hsqldb JDBC Driver 出错....", e);
		}
	}
	
	/**
	 * 启动Hsqldb的数据库服务
	 */
	public static void start () {
		logger.error("datebase >>>> " + hsqlDBName);
		logger.error("database path >>>> " + hsqlDBPath + hsqlDBName);
		logger.error("databse port >>>> " + hsqlDBPort);
		
		Server server = new Server();
		server.setDatabaseName(0, hsqlDBName);
		server.setDatabasePath(0, hsqlDBPath + hsqlDBName);
		server.setPort(hsqlDBPort);
		server.setSilent(true);
		
		server.start();
		logger.error("Hsqldb 【 " + hsqlDBName + " 】 is starting....");
		
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			logger.error("Hsqldb 【 " + hsqlDBName + " 】 starting is error...");
		}
	}
	
	/**
	 * 关闭Hsqldb的数据库服务
	 */
	public static void destroy () {
		Connection conn = getConnection();
		try {
			conn.createStatement().executeUpdate("SHUTDOWN");
		} catch (SQLException sqle) {
			logger.error("关闭Hsqldb数据库服务失败...", sqle);
		}
		logger.error("成功关闭Hsqldb数据库服务...");
	}
	
	/**
	 * 得到Hsqldb数据库连接
	 * 
	 * @return Connection
	 */
	public static Connection getConnection () {
		Connection conn = null;
		logger.error("datebase url >>>> " + hsqlUrl);
		logger.error("database user >>>> " + hsqlUser);
		logger.error("databse pwd >>>> " + hsqlPwd);
		
		try {
			conn = DriverManager.getConnection(hsqlUrl, hsqlUser, hsqlPwd);
		} catch (SQLException sqle) {
			logger.error("获取Hsqldb 连接出错...", sqle);
		}
		return conn;
	}

	public static String getHsqlUrl() {
		return hsqlUrl;
	}

	public static void setHsqlUrl(String hsqlUrl) {
		HsqldbService.hsqlUrl = hsqlUrl;
	}

	public static String getHsqlUser() {
		return hsqlUser;
	}

	public static void setHsqlUser(String hsqlUser) {
		HsqldbService.hsqlUser = hsqlUser;
	}

	public static String getHsqlPwd() {
		return hsqlPwd;
	}

	public static void setHsqlPwd(String hsqlPwd) {
		HsqldbService.hsqlPwd = hsqlPwd;
	}

	public static String getHsqlDBName() {
		return hsqlDBName;
	}

	public static void setHsqlDBName(String hsqlDBName) {
		HsqldbService.hsqlDBName = hsqlDBName;
	}

	public static String getHsqlDBPath() {
		return hsqlDBPath;
	}

	public static void setHsqlDBPath(String hsqlDBPath) {
		HsqldbService.hsqlDBPath = hsqlDBPath;
	}

	public static int getHsqlDBPort() {
		return hsqlDBPort;
	}

	public static void setHsqlDBPort(int hsqlDBPort) {
		HsqldbService.hsqlDBPort = hsqlDBPort;
	}

	public static String getHsqlScriptDir() {
		return hsqlScriptDir;
	}

	public static void setHsqlScriptDir(String hsqlScriptDir) {
		HsqldbService.hsqlScriptDir = hsqlScriptDir;
	}
	
	public static void main(String[] args) {
		System.out.println(File.separator + "hsqldb" + File.separator);
	}
}



3. HSQL DB 全局监听器类

该类便于HSQL DB数据库服务随应用服务器起停。

package com.brofe.hsqldb.core;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
 * 启动Hsqldb服务器Application监听器 
 * 
 * @author brofe
 * @since Mar 4, 2009
 * @version 1.0
 */
public class HsqldbListener implements ServletContextListener {
	
	/**
	 * 启动Hsqldb服务器
	 */
	public void contextInitialized(ServletContextEvent event) {
		HsqldbService.start();
	}

	/**
	 * 关闭Hsqldb服务器
	 */
	public void contextDestroyed(ServletContextEvent event) {
		HsqldbService.destroy();
	}
}


4. 在web.xml中配置监听器

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	
	<listener>
		<display-name>HSQL 数据库服务器监听程序</display-name>
		<listener-class>com.brofe.hsqldb.core.HsqldbListener</listener-class>
	</listener>
	
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>


5. 根据定义的数据库名字,创建*.script数据库脚本和HSQL DB 配置脚本*.properties

默认数据库脚本文件为:default-db.script

create memory table tbl_users(id INTEGER, name varchar(80), age INTEGER)

insert into tbl_users values(1, '阿华', 22)
insert into tbl_users values(1, '小明', 23)
insert into tbl_users values(1, '雅思', 24)
insert into tbl_users values(1, '雅言', 25)

CREATE SCHEMA PUBLIC AUTHORIZATION DBA
CREATE USER SA PASSWORD ""
GRANT DBA TO SA
SET WRITE_DELAY 20
SET SCHEMA PUBLIC


默认HSQL DB配置文件为:default-db.properties
#HSQL Database Engine 1.8.0.10
#Wed Jun 17 11:19:20 CST 2009
hsqldb.script_format=0
runtime.gc_interval=0
sql.enforce_strict_size=false
hsqldb.cache_size_scale=8
readonly=false
hsqldb.nio_data_file=true
hsqldb.cache_scale=14
version=1.8.0
hsqldb.default_table_type=memory
hsqldb.cache_file_scale=1
hsqldb.log_size=200
modified=yes
hsqldb.cache_version=1.7.0
hsqldb.original_version=1.8.0
hsqldb.compatible_version=1.8.0


6. 编写测试程序
package com.brofe.hsqldb.core;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * Hsqldb 数据库测试类 
 * 
 * @author brofe
 * @since Mar 9, 2009
 * @version 1.0
 */
public class TestHsqldbService {
	
	public void testSelect () {
		String sql = "select * from tbl_users";
		Connection conn = HsqldbService.getConnection();
		
		if (conn != null) {
			try {
				PreparedStatement ps = conn.prepareStatement(sql);
				ResultSet rs = ps.executeQuery();
				while (rs.next()) {
					System.out.print("【" + rs.getObject("id").toString() + " ");
					System.out.print(" " + rs.getString("name") + " ");
					System.out.print(" " + rs.getString("age") + " ");
					System.out.print("】");
				}
			} catch (SQLException sqle) {
				sqle.printStackTrace();
			} finally {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	public static void main(String[] args) {
		TestHsqldbService test = new TestHsqldbService();
		test.testSelect();
	}
	
}


7. 启动应用服务器

我使用的是Tomcat,安装目录为:D:\Program Files\Apache Software Foundation\Tomcat 5.5,故在启动应用之后,会在D盘生成如下目录:D:\Program%20Files\Apache%20Software%20Foundation\Tomcat%205.5\webapps\hsqldbdemo\WEB-INF\classes\hsqldb,此时该目录下只有:default-db.properties、default-db.log两个文件,请把default-db.script文件COPY到该目录下,然后再重启应用服务器执行测试类,即可看到效果。(至于为什么没有自动生成default-db.script, 而要手动COPY, 我也很矛盾, 不知道出了什么问题, 希望各位大虾能提宝贵意见

分享到:
评论

相关推荐

    HSQL安装部署使用手册

    如果你需要在Web应用中使用HSQL,可以将数据库文件复制到Web应用的`WEB-INF`目录下,并将`hsqldb.jar`添加到`WEB-INF/lib`目录,确保Web服务器能够访问到。 ### 七、配置数据源 在你的`applicationcontext.xml`...

    hsql数据库详细教程.pdf

    * 使用Server 模式时,需要首先却换到 lib 文件夹下,运行java -cp hsqldb.jar org.hsqldb.Server -database.0 db/mydb -dbname.0 xdb命令来创建数据库。 * 使用DatabaseManager 工具来管理数据库,使用java -cp ...

    把一个javaweb应用包装成桌面应.doc

    - 在将Java Web应用转化为桌面应用时,首先需要选择一个嵌入式的Web服务器。这里推荐使用Jetty,因为它的体积小、性能高,相较于Tomcat的嵌入版本,Jetty在处理并发请求时有更好的表现。对于使用大量AJAX效果的应用...

    ZK简明教程.doc

    在Tomcat的Web应用程序目录下创建一个项目目录,其结构应包括META-INF、WEB-INF、classes、lib子目录,以及src和web pages文件夹。每个子目录都有特定用途,比如WEB-INF/web.xml定义了必需的servlet和监听器,zk.xml...

    java学习之HSQLDB文档.docx

    【Java学习之HSQLDB文档】是关于HSQLDB数据库的学习资料,主要涵盖了该数据库的特点、操作模式以及其在Java中的应用。HSQLDB是一个开源的Java数据库,它遵循SQL标准并提供了JAVA接口,适用于多种场景,如APPLETS、...

    Hibernate中文API

    而事实上,大多数应用程序(特别是web应用程序)都需要通过标识符来区别对象,所以你应该考虑使用标识符属性而不是把它当作一种限制。然而,我们通常不会操作对象的标识(identity),因此它的setter方法的访问级别...

    shark笔记

    - 能够在多种平台上运行,包括Web应用、Swing应用和CORBA/EJB应用。 - 支持LDAP集成,用于组织结构管理。 - 提供CORBA接口,使得其他应用可以通过CORBA API调用Shark的功能。 - 支持多种数据库连接,包括通过URL方式...

    92个经典开源项目集锦

    **SAP DB, Hypersonic/Hsql, McKoi, Xindice, OJB, Hibernate, Castor, Torque, JORM, XMLBeans, JiBX, JAXB Reference Implementation, JaxMe**:这些是数据库访问和对象关系映射(ORM)工具,它们帮助开发者在 ...

    jbpm-jdpl框架简介.pdf

    jDPL Web控制台(jbpm-console.war)是一个基于JSF的Web应用程序,用于监控jBPM平台的执行情况,包括流程定义的管理和流程实例的执行。它还包含一个入门示例,帮助初学者快速理解jPDL的工作原理。 解压jBPM-jpdl-...

    jBPM-jPDL学习笔记—框架设计简介

    jPDL的配置文件和其他资源分布在不同的目录下,如/config包含默认配置文件,/db存放针对不同数据库的初始化脚本,/designer包含图形编辑器插件,/examples包含示例流程,/doc提供用户指南和API文档,而/server目录...

    hibernate方言汇总.docx和SSH的jar包名称

    在Java开发领域,特别是针对企业级应用的持久层操作中,Hibernate作为一款优秀的ORM(Object Relational Mapping)框架,被广泛应用于数据访问层。在配置Hibernate时,一个重要的参数是`hibernate.dialect`,即...

    Java 学生信息管理系统 源码

    ### Java 学生信息管理系统源码解析 #### 知识点概述 本系统采用Java语言进行开发,主要用于管理学生的学习成绩。...这种类型的系统在实际应用中非常常见,对于学习Java Web开发来说具有很高的参考价值。

    Confluence安装指南

    - **Standalone 安装包**: 包含内置的 Tomcat 应用服务器和 HSQL 数据库,适用于初次评估 Confluence 的用户。 - **WAR/EAR 安装包**: 适用于将 Confluence 部署至现有的 J2EE 服务器或 Servlet 容器,同时也支持...

    platform-plus是一个轻量级的,前后端分离的Java快速开发平台-微同商城商业版基础架构

    微同商城商业版基础架构----一个前后端分离的Java快速开发平台,基于SpringBoot2.7.3、Mybatis-Plus3.5.0。支持 Oracle、MySQL、DB2、Postgre、MariaDB、H2、HSQL、SQLite、SQLServer2005、SQLServer 等多种数据库。

    基于SpringBoot2.7.3、Mybatis-Plus3.5.0一个轻量级,前后端分离Java快速开发平台微同软件管理系统

    微同商城商业版基础架构----一个前后端分离的Java快速开发平台,基于SpringBoot2.7.3、Mybatis-Plus3.5.0。支持 Oracle、MySQL、DB2、Postgre、MariaDB、H2、HSQL、SQLite、SQLServer2005、SQLServer 等多种数据库。

Global site tag (gtag.js) - Google Analytics