posts - 2, comments - 27, trackbacks - 0, articles - 60
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          在webapp中使用嵌入式數據庫hsqldb

          Posted on 2017-04-24 22:23 ZhouFeng 閱讀(424) 評論(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
          主站蜘蛛池模板: 桃园市| 得荣县| 五大连池市| 探索| 皋兰县| 积石山| 井冈山市| 陆川县| 班戈县| 漳浦县| 佳木斯市| 赣榆县| 鄂温| 波密县| 浏阳市| 壶关县| 东安县| 军事| 新宁县| 葫芦岛市| 麻城市| 麦盖提县| 滨海县| 公安县| 阿坝县| 军事| 万全县| 瓦房店市| 绍兴县| 偃师市| 湖北省| 阳西县| 商丘市| 许昌市| 池州市| 阿城市| 玉龙| 邻水| 望奎县| 元朗区| 保康县|