h2内存表,远程连接

时间:2010-05-04 19:40:36

标签: database jdbc embedded-database h2

我在使用H2数据库创建内存表时遇到问题,并且在创建并运行它的JVM之外访问它。

文档将网址结构为jdbc:h2:tcp://<host>/mem:<databasename>

我尝试了很多组合,但根本无法使远程连接正常工作。这个功能是否有效,任何人都可以告诉我他们如何使用它的详细信息。

4 个答案:

答案 0 :(得分:11)

您可以查看In-Memory Databases。对于网络连接,您需要主机和数据库名称。看起来您需要jdbc:h2:tcp://localhost/mem:db1jdbc:h2:tcp://127.0.0.1/mem:db1

答案 1 :(得分:9)

迄今为止提到的解决方案都没有为我工作。远程部分无法连接。

根据H2的official documentation

  

要从另一个进程或另一台计算机访问内存数据库,需要在创建内存数据库的同一进程中启动TCP服务器。然后,其他进程需要使用数据库URL通过TCP / IP或TLS访问数据库,例如:jdbc:h2:tcp:// localhost / mem:db1。

我用粗体标记了文本的关键部分。

我在这个人的blog找到了一个有效的解决方案:

  

第一个过程是使用以下URL创建数据库:

     

jdbc:h2:mem:db1

     

并且需要启动tcp服务器:

     

org.h2.tools.Server server = org.h2.tools.Server.createTcpServer().start();

     

其他进程可以使用以下URL访问您的数据库:

     

"jdbc:h2:tcp://localhost/mem:db1"

就是这样!工作就像一个魅力!

答案 2 :(得分:2)

刚刚遇到这个问题,我发现我需要将DB_CLOSE_DELAY=-1附加到 tcp连接的JDBC URL。所以我的网址是:

  • 在记忆中:jdbc:h2:mem:dbname
  • TCP连接:jdbc:h2:tcp://localhost:9092/dbname;DB_CLOSE_DELAY=-1

From the h2 docs

  

默认情况下,关闭与数据库的最后一个连接会关闭   数据库。对于内存数据库,这意味着内容丢失。   要使数据库保持打开状态,请将;DB_CLOSE_DELAY=-1添加到数据库中   URL。

不包括DB_CLOSE_DELAY=-1意味着我无法通过TCP连接到正确的数据库。建立连接,但它使用与内存中创建的版本不同的版本(通过使用IFEXISTS=true参数进行验证)

答案 3 :(得分:0)

在 SpringBoot 中:https://www.baeldung.com/spring-boot-access-h2-database-multiple-apps

fhandle1 = @(x) x.^3 - 10.*x + 20; 
figure(1);
hold on;
fplot(fhandle1,[0, 10]); 
[xMin, yMin] = fminbnd(fhandle1, 2.5, 4);
plot(xMin, yMin, 'or')
[xzero,yzero] = fzero(fhandle1,5);
plot(xzero,yzero,'*g')