posts - 2, comments - 27, trackbacks - 0, articles - 60
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

在webapp中使用嵌入式数据库hsqldb

Posted on 2017-04-24 22:23 ZhouFeng 阅读(397) 评论(0)  编辑  收藏 所属分类: 原创DataBase
HSQLDB启动方便,不用安装,在之前的文档里已介绍过如何以服务器模式启动,并且通过JDBC连接,接下来介绍如何在webapp中嵌入hsqldb,让其可以随应用一起启动,比如和Tomcat服务器一起启动,不用单独启动数据库。这里有两种模式可以选择
一种是进程模式启动,按文件方式加载数据库,只有与Tomcat服务器在同一JVM中才能访问
另一种是用JAVA程序来启动服务器,以网络方式提供数据库服务,可以在Tomcat之外用hsqldb客户端来连接,方便调试
这两种数据文件都建议放在工程里,如下案例中是将数据库放在WEB-INF/db/目录下

1.加载hsqldb.jar
将hsqldb.jar文件加入到现有webapp工程中,拷贝hsqldb.jar至WEB-INF/lib/hsqldb.jar

2.创建WEB-INF/db/目录
在开发阶段,需要把数据文件放在工程中,而不是tomcat里,这样处理对打包,版本控制管理也方便
为了方便启动数据库,可以写一个批处理,如WEB-INF/startdb.bat,大家可根据自己的路径修改,内容如下
cd db
@java -classpath ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file:mycms --dbname.0 mycmsdb
文件名和数据库名可以不同,此处文件名为mycms,而数据库名为mycmsdb

3.使用Servlet启动数据库
可以创建一个自启动Servlet,用于启动数据库,这种方式可以使用客户端工具连接到应用数据库上,主要用于在线调试,或远程管理
package com.zhouf.mydb;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;

import org.hsqldb.server.Server;

@WebServlet(loadOnStartup=1)
public class HsqldbServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    private Server server = new Server();
       
    public HsqldbServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        String path=this.getServletContext().getRealPath("/WEB-INF/db/mycms");
        System.out.println("dbpath["+path+"]");
        
        server.setDatabaseName(0, "mycmsdb");
        server.setDatabasePath(0, path);
        server.setPort(9001);
        server.setSilent(true);
        Thread thread=new Thread(new Runnable(){
            public void run() {
                server.start();
            }
        });
        thread.start();
    }

    public void destroy() {
        super.destroy();
        server.shutdown();
    }
    
}
注意服务端口不要冲突

4.完成一个数据库连接类,用于处理数据库连接管理
public class DBManage {

    public static Connection getConnection() {
        Connection conn = null;
        try {
            
            //根据连接配置获取数据库连接
            Class.forName("org.hsqldb.jdbcDriver").newInstance();
            
            //*
            
//连接Hsqldb Server
            conn= DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/mycmsdb;shutdown=true","SA","");
            /*/
            
            //直接获得In-process连接
            String path = DBManage.class.getResource("").toString();
            String dbpath = path.substring(0,path.indexOf("classes")) + "db/mycms";

            conn = DriverManager.getConnection("jdbc:hsqldb:"+dbpath,"SA","");
            //
*/
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return conn;
    }
}
上面的连接管理两种方式都支持,可选用,这样应用可以发布到tomcat里独立运行,也可以打包成war发布,这样一个带war文件就可以演示,相当愉快:D

只有注册用户登录后才能发表评论。


网站导航: