2015-03-21 9 views
6

Ich bin eine Server-Client-Anwendung in Java und ich muss eine lokale Datenbank auf der Serverseite implementieren, und ich entschied mich für H2-Datenbank-Engine gehen.Starten H2-Datenbank programmgesteuert

Eine weitere Sache zu hinzufügen ist, dass ich Usa TCP-Verbindung zum Starten und Ausführen der Datenbank. Dies ist, was ich zusammen so weit:

Class.forName("org.h2.Driver"); 
Server server = Server.createTcpServer(DB_PATH).start(); 

Connection currentConn = DriverManager.getConnection(DB_PATH, DB_USER, DB_PASSWORD); 

Wo die Verbindungszeichenfolge ist jdbc:h2:tcp://localhost/~/test.

Das Stück Code mit einer Ausnahme zurückgibt:

Feature not supported: "jdbc:h2:tcp://localhost/~/test" [50100-176] 

Ich folgte this article.

Antwort

11

So etwas sollte

arbeiten
Server server = null; 
      try { 
       server = Server.createTcpServer("-tcpAllowOthers").start(); 
       Class.forName("org.h2.Driver"); 
       Connection conn = DriverManager. 
        getConnection("jdbc:h2:tcp://localhost/~/stackoverflow", "sa", ""); 
       System.out.println("Connection Established: " 
         + conn.getMetaData().getDatabaseProductName() + "/" + conn.getCatalog()); 

      } catch (Exception e) { 
       e.printStackTrace(); 

und der Ausgang Verbindung hergestellt: H2/Stackoverflow

Das mit h2-1.4.184

5

wurde getestet Dies ist meine einfache H2- DBManager - benennen Sie einfach seinen Dateinamen DBManager.java und fühlen Sie sich frei, ihn wiederzuverwenden:

import java.sql.SQLException; 

import org.h2.tools.Server; 

public class DBManager { 

    private static void startDB() throws SQLException { 
     Server.createTcpServer("-tcpPort", "9092", "-tcpAllowOthers").start(); 

    } 

    private static void stopDB() throws SQLException { 
     Server.shutdownTcpServer("tcp://localhost:9092", "", true, true); 
    } 

    public static void main(String[] args) { 

     try { 
      Class.forName("org.h2.Driver"); 

      if (args.length > 0) { 
       if (args[0].trim().equalsIgnoreCase("start")) { 
        startDB(); 
       } 

       if (args[0].trim().equalsIgnoreCase("stop")) { 
        stopDB(); 
       } 
      } else { 
       System.err 
         .println("Please provide one of following arguments: \n\t\tstart\n\t\tstop"); 
      } 

     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

} 
3

Ich war in der Lage, es etwas einfacher zu tun, indem ich die Standardwerte annahm:

 Server server = Server.createTcpServer().start(); 
Verwandte Themen