java 代码
package com.b2b.common.web.listener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.log4j.Logger;
import org.hsqldb.Server;
import com.cpic.b2b.common.util.StringUtils;
public class HsqlDBlistener implements ServletContextListener {
protected Logger logger = Logger.getLogger(getClass());
private Server server=new Server();
private String path;
private String dbName;
private int port=-1;
public void contextInitialized(ServletContextEvent sce) {
logger.info(" ============= HsqlListener initialize...");
getInitParam(sce);
// 启动数据库
startServer();
}
/**
* 得到数据库路径
* @param sce
* @return
*/
private String getDbPath(ServletContextEvent sce) {
path = sce.getServletContext().getInitParameter("hsql.dbPath");
if (path.startsWith("{user.home}")) {
path = path.replaceFirst("\\{user.home\\}", System.getProperty("user.home").replace('\\', '/'));
}
if (path.startsWith("{webapp.root}")) {
path = path.replaceFirst("\\{webapp.root\\}", sce.getServletContext().getRealPath("/").replace('\\', '/'));
}
return path;
}
/**
* 启动服务
* @param dbPath
* @param dbName
* @param port
*/
private void startServer() {
getServer();
server.start();
logger.info(" ============= hsqldb started...");
// 等待Server启动
try {
Thread.sleep(800);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 停止服务
*/
private void stopServer() {
getServer();
server.stop();
logger.info(" ============= hsqldb stopped...");
// 等待Server关闭
try {
Thread.sleep(800);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 得到服务
* @param dbPath
* @param dbName
* @param port
*/
private void getServer() {
server.setDatabaseName(0, dbName);
server.setDatabasePath(0, path + dbName);
if (port != -1)
server.setPort(port);
server.setSilent(true);
server.setTrace(true);
}
/**
* 得到初始化的参数
* @param sce
*/
private void getInitParam(ServletContextEvent sce) {
//得到路径
getDPath(sce);
//得到数据库名称
getDName(sce);
// 数据库访问端口
getDPort(sce);
}
private int getDPort(ServletContextEvent sce) {
try {
port = Integer.parseInt(sce.getServletContext().getInitParameter("hsql.port"));
} catch (Exception e) {
e.printStackTrace();
}
return port;
}
/**
* 获取数据库名称
* @param sce
*/
private String getDName(ServletContextEvent sce) {
// 数据库文件名
dbName = sce.getServletContext().getInitParameter("hsql.dbName");
if (StringUtils.isEmpty(dbName)) {
logger.info(" ============= Can't get hsqldb.dbName from web.xml Context Param");
return "";
}
return dbName;
}
/**
* 获取路径
* @param sce
* @return
*/
private String getDPath(ServletContextEvent sce) {
// 获得数据库文件访问路径
path = getDbPath(sce);
if (!path.endsWith("/"))
path = path + "/";
if (StringUtils.isEmpty(path)) {
logger.info(" ============= Can't get hsqldb.path from web.xml Context Param");
logger.debug("hsqldb_path:" + path);
return "";
}
return path;
}
public void contextDestroyed(ServletContextEvent sce) {
logger.info(" ============= HsqlListener destroyed...");
getInitParam(sce);
Connection conn = null;
try {
Class.forName("org.hsqldb.jdbcDriver");
conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:"+port+"/"+dbName+"", "sa", "");
Statement stmt = conn.createStatement();
stmt.executeUpdate("SHUTDOWN;");
logger.info(" ============= hsqldb shutdown...");
} catch (Exception e) {
e.printStackTrace();
}
stopServer();
}
}
web.xml
<context-param>
<param-name>hsql.dbPath</param-name>
<param-value>{webapp.root}/WEB-INF/dbms/db</param-value>
</context-param>
<context-param>
<param-name>hsql.dbName</param-name>
<param-value>message</param-value>
</context-param>
<context-param>
<param-name>hsql.port</param-name>
<param-value>9898</param-value>
</context-param>
<listener>
<listener-class>com.b2b.common.web.listener.HsqlDBlistener</listener-class>
</listener>
spring 数据库配置
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}">
</property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
jdbc.properties
jdbc.driverClassName=org.hsqldb.jdbcDriver
#jdbc.url=jdbc:hsqldb:hsql:src/DB/message;shutdown=true
jdbc.url=jdbc:hsqldb:hsql://localhost:9898/message
#jdbc.url=jdbc:hsqldb:res:/DB/message
jdbc.username=sa
jdbc.password=
</bean>
分享到:
相关推荐
HSQL查询语法 HSQL(Hibernate Query Language)是一种强大且灵活的查询语言,用于查询Hibernate应用程序中的数据。下面将对HSQL的基本语法和使用方法进行详细介绍。 1. 大小写敏感性问题 HSQL查询语句对大小写并...
HSQL Database,全称为HyperSQL Database,是一款轻量级、高性能、开源的SQL关系型数据库管理系统,特别适合于Java应用程序。这款数据库系统以其简洁的API、快速的性能和全面的SQL支持,在Java开发环境中得到了广泛...
如何使用hsql数据库
HSQL(HyperSQL)是一种轻量级、高性能的关系型数据库管理系统,它支持SQL标准并提供了多种运行模式,包括单用户模式、嵌入式模式和服务器模式。HSQL因其小巧、快速和易于使用而受到开发者们的青睐,尤其适用于开发...
《HSQL数据库安装部署使用详解》 HSQL(HyperSQL)是一种轻量级、高性能的关系型数据库管理系统,常用于开发测试环境或者嵌入式应用。本文将详细介绍HSQL的安装、部署以及使用过程,帮助您顺利搭建并操作HSQL数据库...
### Pentaho HSQL连接教程 #### 一、前言 Pentaho BI Suite是一款非常强大的商业智能工具,它集成了数据集成、报表设计、仪表板展示等多种功能。本教程将详细介绍如何在Pentaho BI Suite中连接到HSQLDB(HyperSQL ...
HSQL(HyperSQL)是一个开源的关系型数据库管理系统,它支持内存模式和文件模式,能够处理文本格式的数据,如CSV(逗号分隔值)文件。在本篇笔记中,我们将探讨如何使用HSQL处理文本数据库,特别是如何导入和操作CSV...
《深入理解HSQL源代码与Eclipse环境搭建》 HSQLDB,全称为HyperSQL Database,是一款开源的关系型数据库管理系统,特别适用于Java应用程序。它的源代码开放,使得开发者能够深入理解其内部工作原理,进行定制化开发...
在本篇博文中,我们将深入探讨Spring框架在数据库访问方面的应用,特别关注使用HSQL内存数据库的实践。HSQL数据库是一种轻量级的关系型数据库管理系统,适用于开发测试和快速原型设计,因为它不需要独立服务器进程,...
在本篇博文中,我们将深入探讨Spring框架在数据库访问方面的应用,特别关注使用HSQL内存数据库的实践。Spring是Java领域最广泛使用的轻量级框架之一,它为开发者提供了全面的事务管理、数据访问集成以及IoC...
标题中的“hsql-file数据库的java简单调用实现”指的是使用Java编程语言与HSQLDB(HyperSQL数据库)进行交互,特别是在文件模式下操作数据库。HSQLDB是一种轻量级、开源的关系型数据库管理系统,它支持内存模式和...
hsql数据库,体积最小的数据库,使用最方便的数据库,不用安装,解压就能用,携带方便
首先说一下hsqldb几个优点 <br> 1. 轻巧,只有600多K,运行速度非常快。结合Hibernate数据库无关的特性,非常适合在项目开发的时候使用。 2. 作为单元测试数据库。单元测试的时候,启动HSQLDB的file模式,...
《HSQL数据库2.2.5:轻量级数据库解决方案详解》 HSQL数据库,全称为HyperSQL Database,是一款开源的、轻量级的Java数据库管理系统,尤其适用于内存模式、单机模式以及分布式多机环境。HSQLDB 2.2.5是其一个重要的...
**HSQldb详解** HSQldb,全称为HyperSQL Database,是一个完全用Java语言编写的开源关系型数据库管理系统。它的设计目标是提供一个轻量级、高性能、易于使用且完全符合SQL标准的数据库解决方案。...
【标题】"用maven构建SpringMVC+JPA+Hibernate+Hsql+jetty的web项目"涉及了多个核心的Java Web开发技术,这里我们将深入探讨这些技术以及如何将它们整合到一起。 1. Maven:Maven是Apache的一个开源项目,它是一个...
标题中的“HSQL JDBC操作”指的是使用Java的JDBC(Java Database Connectivity)接口与HSQLDB(HyperSQL数据库)进行交互。HSQLDB是一个轻量级、开源的关系型数据库管理系统,广泛用于测试和开发环境中,因为它启动...