在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();
以下是我的问题
答案 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数据库。您可以使用
执行此操作启动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连接。