当前位置: 首页 > 知识库问答 >
问题:

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

周弘盛
2023-03-14

在H2文档中,它表示只有web服务器支持浏览器连接。这是否意味着我们只能在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访问DB: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数据库吗?怎么做
  2. 我是否误解了有关使用服务器部分的H2文档

共有2个答案

宋博易
2023-03-14

对托马斯·穆勒的回答的一些补充意见:

“H2控制台工具...一个小型Web应用程序”

您可以将其视为DBeaver或Navicat等数据库应用程序的“小替代品”。

除此之外,如果您从与H2数据库相同的JVM中启动H2控制台(例如,它已使用org. h2启动。工具。运行cript.execute(...)),您将能够使用H2控制台工具的“嵌入式模式”连接到H2数据库,而无需使用H2 TCP服务器。

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

嵌入式模式示例

如果您在同一JVM的端口8085上启动了H2数据库"test_database",选项DB_CLOSE_DELAY=-1,并且没有启动TCP服务器...

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)

启动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连接。

卫俊力
2023-03-14

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

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

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

关于数据库URL:请参阅关于数据库URL的留档。

 类似资料:
  • 我对一个应用程序的JPA层进行了几个单元测试。这个JPA层由JPA实体和一个提供持久化实体所需的基本API的服务组成。单元TET直接使用javax.Persistence类来处理PersistenceManager。然后测试持久性API,我可以在日志中看到创建表和序列等的SQL语句。 persistence.xml文件的相关部分如下所示: 我已经下载了Windows安装程序H2 1.4.200,并

  • 我也搜索了一些谷歌解决方案,但它不工作输入图像描述在这里

  • 问题内容: 我使用以下URL通过代码创建了一个H2数据库: jdbc:h2:C:/data/fixed.db 我的代码可以创建表,执行查询。如果手动打开文件,则可以成功查看其内容并查看创建查询等 但是,当我尝试通过Web界面使用H2控制台时,看不到数据库。而是,Web控制台在此处创建 另一个 空数据库。我只是无法加载我的数据库。 我想念什么? 编辑 我的代码使用H2 1.3.175 Web控制台H

  • 我只是试图查看嵌入式H2数据库的H2数据库内容,当我没有在中指定任何内容并从mvn spring:run开始时,spring-boot创建了嵌入式H2数据库。我可以看到hibernate JPA正在创建表,但是如果我试图访问下面URL处的h2控制台,数据库没有表。 我看到这样的建议:查看Spring启动的嵌入式H2数据库的内容 但是我不知道将建议的XML放入spring-boot的何处,即使我放了

  • 使用和启动H2管理系统 H2 管理系统让你能够通过一个浏览器对 H2 的 SQL 数据库进行管理操作。H2 管理系统不仅可以连接 H2 数据库,也可以连接其他支持 JDBC API 的数据库。 这是一个 C/S 应用,在服务器和客户端(浏览器)上都要运行 H2 的管理程序。根据平台不同,H2 管理系统支持多种启动应用的方式: 操作系统 启动 Windows 点击 [Start], [All Pro

  • 我已经创建了一个Spring启动应用程序,我没有使用内存中的H2数据库,而是安装了用于H2数据库的exe并在外部使用它。现在我想将我的Spring启动应用程序与这个外部H2数据库连接起来。我已经添加了依赖项,我已经在application.properties文件中添加了所有必需的属性(你可以看到下面)。此外,我还创建了一个带有注释的Entity类。但是当我尝试连接数据库时,它即使使用不同的URL