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, 我也很矛盾, 不知道出了什么问题, 希望各位大虾能提宝贵意见)
分享到:
相关推荐
如果你需要在Web应用中使用HSQL,可以将数据库文件复制到Web应用的`WEB-INF`目录下,并将`hsqldb.jar`添加到`WEB-INF/lib`目录,确保Web服务器能够访问到。 ### 七、配置数据源 在你的`applicationcontext.xml`...
HSQL可以与Java应用程序无缝集成,例如通过`DriverManager.getConnection()`方法获取`Connection`对象。在Standalone模式下,可以直接通过文件路径连接数据库。在Hibernate框架中,可以利用已有的数据库连接创建...
* 使用Server 模式时,需要首先却换到 lib 文件夹下,运行java -cp hsqldb.jar org.hsqldb.Server -database.0 db/mydb -dbname.0 xdb命令来创建数据库。 * 使用DatabaseManager 工具来管理数据库,使用java -cp ...
- 在将Java Web应用转化为桌面应用时,首先需要选择一个嵌入式的Web服务器。这里推荐使用Jetty,因为它的体积小、性能高,相较于Tomcat的嵌入版本,Jetty在处理并发请求时有更好的表现。对于使用大量AJAX效果的应用...
在Tomcat的Web应用程序目录下创建一个项目目录,其结构应包括META-INF、WEB-INF、classes、lib子目录,以及src和web pages文件夹。每个子目录都有特定用途,比如WEB-INF/web.xml定义了必需的servlet和监听器,zk.xml...
【Java学习之HSQLDB文档】是关于HSQLDB数据库的学习资料,主要涵盖了该数据库的特点、操作模式以及其在Java中的应用。HSQLDB是一个开源的Java数据库,它遵循SQL标准并提供了JAVA接口,适用于多种场景,如APPLETS、...
而事实上,大多数应用程序(特别是web应用程序)都需要通过标识符来区别对象,所以你应该考虑使用标识符属性而不是把它当作一种限制。然而,我们通常不会操作对象的标识(identity),因此它的setter方法的访问级别...
- 能够在多种平台上运行,包括Web应用、Swing应用和CORBA/EJB应用。 - 支持LDAP集成,用于组织结构管理。 - 提供CORBA接口,使得其他应用可以通过CORBA API调用Shark的功能。 - 支持多种数据库连接,包括通过URL方式...
**SAP DB, Hypersonic/Hsql, McKoi, Xindice, OJB, Hibernate, Castor, Torque, JORM, XMLBeans, JiBX, JAXB Reference Implementation, JaxMe**:这些是数据库访问和对象关系映射(ORM)工具,它们帮助开发者在 ...
jDPL Web控制台(jbpm-console.war)是一个基于JSF的Web应用程序,用于监控jBPM平台的执行情况,包括流程定义的管理和流程实例的执行。它还包含一个入门示例,帮助初学者快速理解jPDL的工作原理。 解压jBPM-jpdl-...
jPDL的配置文件和其他资源分布在不同的目录下,如/config包含默认配置文件,/db存放针对不同数据库的初始化脚本,/designer包含图形编辑器插件,/examples包含示例流程,/doc提供用户指南和API文档,而/server目录...
在Java开发领域,特别是针对企业级应用的持久层操作中,Hibernate作为一款优秀的ORM(Object Relational Mapping)框架,被广泛应用于数据访问层。在配置Hibernate时,一个重要的参数是`hibernate.dialect`,即...
### Java 学生信息管理系统源码解析 #### 知识点概述 本系统采用Java语言进行开发,主要用于管理学生的学习成绩。...这种类型的系统在实际应用中非常常见,对于学习Java Web开发来说具有很高的参考价值。
- **Standalone 安装包**: 包含内置的 Tomcat 应用服务器和 HSQL 数据库,适用于初次评估 Confluence 的用户。 - **WAR/EAR 安装包**: 适用于将 Confluence 部署至现有的 J2EE 服务器或 Servlet 容器,同时也支持...
微同商城商业版基础架构----一个前后端分离的Java快速开发平台,基于SpringBoot2.7.3、Mybatis-Plus3.5.0。支持 Oracle、MySQL、DB2、Postgre、MariaDB、H2、HSQL、SQLite、SQLServer2005、SQLServer 等多种数据库。
微同商城商业版基础架构----一个前后端分离的Java快速开发平台,基于SpringBoot2.7.3、Mybatis-Plus3.5.0。支持 Oracle、MySQL、DB2、Postgre、MariaDB、H2、HSQL、SQLite、SQLServer2005、SQLServer 等多种数据库。