如何在控制台中连接到WebServer模式H2数据库?

时间:2013-12-25 04:02:04

标签: h2

在H2文档中,它显示only the web server supports browser connections。这是否意味着我们只能在WebServer模式下通过控制台访问H2数据库,而不是TcpServer?但是,当我在测试中进行测试时,结果完全不如预期。

public class TestMem {
    public static void main(String... args) throws Exception {

        Class.forName("org.h2.Driver");
        Connection conn = DriverManager.getConnection("jdbc:h2:mem:test");
        conn.createStatement().execute("create table test(id int)");

        Server server = Server.createTcpServer().start();//1.TcpServer
//      Server server = Server.createWebServer().start();//2.WebServer

        System.out.println("Server started and connection is open.");
        System.out.println("URL: jdbc:h2:" + server.getURL() + "/mem:test");

        Thread.sleep(5*60*1000);

        System.out.println("Stopping server and closing the connection");
        server.stop();
        conn.close();
    }
}

如果我启动TcpServer,我可以通过此URL访问数据库: jdbc:h2:tcp:// localhost:9092 / mem:test 在控制台中。

//Use TcpServer
  Server server = Server.createTcpServer().start();

但是当我启动WebServer时,我尝试连接使用 jdbc:h2:http:// localhost:8082 / mem:test ,下面的异常将抛出: IO例外:“ java.io.IOException:文件名,目录名或卷标语法不正确“; “http:// localhost:8082 / mem:test.h2.db”[90031-172] 90031/90031(帮助)。

//Use WebServer
  Server server = Server.createWebServer().start();

以下是我的问题

  1. 我们可以在控制台中访问WebServer模式h2 DataBase吗?怎么样?
  2. 我是否误解了有关使用服务器部分的H2文档?

2 个答案:

答案 0 :(得分:5)

H2 Console tool(使用Server.createWebServer创建)是一个Web服务器和一个小型Web应用程序,允许您使用Web浏览器(如Firefox,Google)连接到数据库(任何JDBC数据库) Chrome,Internet Explorer等。)

H2 TCP Server(使用Server.createTcpServer创建)是H2 JDBC客户端的服务器。它不是Web服务器,也不是Web应用程序。您无法从Web浏览器连接到此服务器。

如果同时启动控制台工具(Web服务器)和TCP服务器,则可以使用浏览器连接到控制台工具,然后可以在服务器模式下连接到H2数据库。

关于数据库网址:请参阅documentation about database URLs

答案 1 :(得分:0)

对托马斯·穆勒答案的一些补充评论:

  

" H2控制台工具......一个小型网络应用程序"

您可以将其视为"小型替代品"到数据库应用程序,如DBeaver或Navicat。

除此之外,如果从与H2数据库相同的JVM中启动H2控制台(例如,已经使用org.h2.Tools.RunScript.execute(...)启动),您将成为能够使用"嵌入模式" H2控制台工具连接到H2数据库而不使用H2 TCP服务器。

(其他数据库工具,如DBeaver不会在同一个JVM中运行。如果您使用嵌入式H2模式和DBeaver,您将连接到DBeaver的JVM内的额外临时数据库。)

嵌入模式示例

如果您启动了H2数据库" test_database"在同一个JVM中的端口8085上,选项DB_CLOSE_DELAY = -1并且没有启动TCP服务器...启动Web浏览器并输入以下地址以显示H2控制台工具Web应用程序:

http://localhost:8085

例如,使用以下设置以嵌入模式连接:

Setting Name: Generic H2 (Embedded)
Driver Class: org.h2.Driver
JDBC URL: jdbc:h2:mem:test_database;MODE=MySQL
UserName: {user, e.g. root}
Password: {password, e.g mypassword}

服务器模式示例

如果启动了TCP服务器,则可以在服务器模式下连接到H2数据库。您可以使用

执行此操作
  • H2控制台工具(来自同一JVM或来自另一个JVM)
  • 任何其他合适的数据库工具(例如DBeaver)。

启动Web浏览器并输入以下地址以显示H2控制台工具Web应用程序:

http://localhost:8085

例如,使用以下设置在服务器模式下连接:

Setting Name: Generic H2 (Server)
Driver Class: org.h2.Driver
JDBC URL: jdbc:h2:tcp://localhost:9095/mem:test_database;MODE=MySQL
UserName: {user, e.g. root}
Password: {password, e.g mypassword}

您也可以使用网址

jdbc:h2:tcp://localhost:9095/mem:test_database;MODE=MySQL 

例如与DBeaver连接。