HSQLDB學習(3)

前面已經看到HSQLDB可以在同一個JVM中以服務的形式啓動,我們可以在應用啓動的時候,比如在app加載的時候,在listener中啓動數據庫,然後就可以使用數據庫了,不需要再去專門啓動數據庫。
下面是我寫的DatabaseThread以及測試代碼,可以把啓動的工作放到app加載的時候。

package rst.hsqldb.start;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.hsqldb.Server;

import junit.framework.TestCase;

/**
* Class description.
*
* @author rst
*/
public class TestStartServerInCode extends TestCase {

   /*
    * @see TestCase#setUp()
    */
   protected void setUp() throws Exception {
       DatabaseThread db = new DatabaseThread();
       //mostly can add 10 database instance.
       db.addDatabase("db/db");
       new Thread(db).run();
       //wait for finishing start.
       Thread.sleep(5000);
   }

   /*
    * @see TestCase#tearDown()
    */
   protected void tearDown() throws Exception {
   }

   public void testStart() throws ClassNotFoundException, SQLException{
       Class.forName("org.hsqldb.jdbcDriver");
       Connection conn=DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/db;ifexists=true","sa","");
       assertNotNull(conn);
       conn.close();
   }
   
}

class DatabaseThread implements Runnable {

   private String address = "localhost";
   
   private int port = 9001;
   
   private boolean silent = true;
   
   private boolean trace = true;
   
   private List databases = new ArrayList();
   
   public void addDatabase(String path){
       databases.add(path);
   }
   
   /**
    * @return Returns the address.
    */
   public String getAddress() {
       return address;
   }
   /**
    * @param address The address to set.
    */
   public void setAddress(String address) {
       this.address = address;
   }
   /**
    * @return Returns the databases.
    */
   public List getDatabases() {
       return databases;
   }
   /**
    * @param databases The databases to set.
    */
   public void setDatabases(List databases) {
       this.databases = databases;
   }
   /**
    * @return Returns the dbnames.
    */
   public String[] getDbnames() {
       return dbnames;
   }
   /**
    * @param dbnames The dbnames to set.
    */
   public void setDbnames(String[] dbnames) {
       this.dbnames = dbnames;
   }
   /**
    * @return Returns the port.
    */
   public int getPort() {
       return port;
   }
   /**
    * @param port The port to set.
    */
   public void setPort(int port) {
       this.port = port;
   }
   /**
    * @return Returns the silenct.
    */
   public boolean isSilent() {
       return silent;
   }
   /**
    * @param silenct The silenct to set.
    */
   public void setSilent(boolean silent) {
       this.silent = silent;
   }
   /**
    * @return Returns the trace.
    */
   public boolean isTrace() {
       return trace;
   }
   /**
    * @param trace The trace to set.
    */
   public void setTrace(boolean trace) {
       this.trace = trace;
   }
   private String[] dbnames;
   
   /* (non-Javadoc)
    * @see java.lang.Runnable#run()
    */
   public void run() {

       String[] args = null;  
       
       ArrayList list = new ArrayList();

       if(address != null){
           list.add("-address");
           list.add(address);
       }
       
       if(port != 0){
           list.add("-port");
           list.add(""+port);
       }

       list.add("-silent");
       list.add("" + silent);
       
       list.add("-trace");
       list.add("" + trace);
       
       for(int i = 0; i < databases.size(); i++){
           list.add("-database." + i);
           list.add((String) databases.get(i));
           list.add("-dbname." + i);
           String database = (String) databases.get(i);
           String dbname = database.substring(database.lastIndexOf("/")+1);
           list.add(dbname);
       }
       
       //args = (String[]) list.toArray();
       args = new String[list.size()];
       for(int i = 0; i < list.size(); i++){
           args = (String) list.get(i);
           System.out.println(args);
       }
       
       //System.out.println(args);
       
       //調用HSQLDB的服務入口  
       Server.main(args);  
   }
   
}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章