我在使用H2数据库创建内存表时遇到问题,并且在创建并运行它的JVM之外访问它。
文档将网址结构为jdbc:h2:tcp://<host>/mem:<databasename>
我尝试了很多组合,但根本无法使远程连接正常工作。这个功能是否有效,任何人都可以告诉我他们如何使用它的详细信息。
答案 0 :(得分:11)
您可以查看In-Memory Databases。对于网络连接,您需要主机和数据库名称。看起来您需要jdbc:h2:tcp://localhost/mem:db1
或jdbc: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
jdbc:h2:tcp://localhost:9092/dbname;DB_CLOSE_DELAY=-1
默认情况下,关闭与数据库的最后一个连接会关闭 数据库。对于内存数据库,这意味着内容丢失。 要使数据库保持打开状态,请将
;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')