Posted on 2017-04-24 22:23
ZhouFeng 阅读(400)
评论(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