Posted on 2017-04-24 22:23
ZhouFeng 閱讀(436)
評論(0) 編輯 收藏 所屬分類:
原創(chuàng) 、
DataBase
HSQLDB啟動方便,不用安裝,在之前的文檔里已介紹過如何以服務(wù)器模式啟動,并且通過JDBC連接,接下來介紹如何在webapp中嵌入hsqldb,讓其可以隨應(yīng)用一起啟動,比如和Tomcat服務(wù)器一起啟動,不用單獨啟動數(shù)據(jù)庫。這里有兩種模式可以選擇
一種是進程模式啟動,按文件方式加載數(shù)據(jù)庫,只有與Tomcat服務(wù)器在同一JVM中才能訪問
另一種是用JAVA程序來啟動服務(wù)器,以網(wǎng)絡(luò)方式提供數(shù)據(jù)庫服務(wù),可以在Tomcat之外用hsqldb客戶端來連接,方便調(diào)試
這兩種數(shù)據(jù)文件都建議放在工程里,如下案例中是將數(shù)據(jù)庫放在WEB-INF/db/目錄下
1.加載hsqldb.jar
將hsqldb.jar文件加入到現(xiàn)有webapp工程中,拷貝hsqldb.jar至WEB-INF/lib/hsqldb.jar
2.創(chuàng)建WEB-INF/db/目錄
在開發(fā)階段,需要把數(shù)據(jù)文件放在工程中,而不是tomcat里,這樣處理對打包,版本控制管理也方便
為了方便啟動數(shù)據(jù)庫,可以寫一個批處理,如WEB-INF/startdb.bat,大家可根據(jù)自己的路徑修改,內(nèi)容如下
cd db
@java -classpath ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file:mycms --dbname.0 mycmsdb
文件名和數(shù)據(jù)庫名可以不同,此處文件名為mycms,而數(shù)據(jù)庫名為mycmsdb
3.使用Servlet啟動數(shù)據(jù)庫
可以創(chuàng)建一個自啟動Servlet,用于啟動數(shù)據(jù)庫,這種方式可以使用客戶端工具連接到應(yīng)用數(shù)據(jù)庫上,主要用于在線調(diào)試,或遠程管理
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();
}
}
注意服務(wù)端口不要沖突
4.完成一個數(shù)據(jù)庫連接類,用于處理數(shù)據(jù)庫連接管理
public class DBManage {
public static Connection getConnection() {
Connection conn = null;
try {
//根據(jù)連接配置獲取數(shù)據(jù)庫連接
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;
}
}
上面的連接管理兩種方式都支持,可選用,這樣應(yīng)用可以發(fā)布到tomcat里獨立運行,也可以打包成war發(fā)布,這樣一個帶war文件就可以演示,相當愉快:D