java - H2客户端无法连接到服务器

标签 java jdbc database-connection h2

我正在尝试使用 java 连接到在同一台计算机上启动的 H2 服务器。我以混合模式启动了 H2 服务器。连接到服务器时出现错误。

启动服务器的代码是:

Server.createTcpServer("-tcp", "-tcpAllowOthers", "-tcpSSL").start();

连接服务器的代码是:

Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:tcp://127.0.0.1/~/Data/test", "", "");

错误是:

连接中断:“意外状态 352518912”[90067-197]

任何人请帮我解决这个问题。我被这个问题困扰了两天。

最佳答案

您需要在 URL 中使用 ssl 协议(protocol)而不是 tcp,因为您在服务器上使用加密的 socked。

“jdbc:h2:ssl://127.0.0.1/~/Data/test”

另请注意,由于安全原因,在最新版本的 H2 中默认无法远程创建数据库。您需要在服务器端使用本地 url 创建数据库,例如 "jdbc:h2:~/Data/test",这足以打开和关闭与其的连接。

此外,我希望空密码仅适用于问题中的示例代码。如果您的数据库有一个具有 ADMIN 权限的用户(创建该数据库的第一个连接的用户名和密码用于创建此类用户)和一个空密码或弱密码(或者如果您启用远程数据库创建),则任何人、谁可以连接到该端口,将获得对您的服务器进程的完全访问权限,并且该进程很可能已经与您具有相同的系统访问权限,因此您可以使用 -tcpAllowOthers 有效地创建一个远程安全漏洞,并且这样的密码。

关于java - H2客户端无法连接到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58399209/

相关文章:

java - 指示器 OnPageChangeListener 不起作用

java - Mysql java执行更新错误

java - JDBC 连接池

java - 与 Java : How to import an arbitrary . csv 文件中的文件实例函数混淆到 mysql 而不是特定文件?

c# - 我已经在 MySQL Workbench 中创建了 MySQL 数据库,但无法在 C# 中使用

Android,Bluemix 错误 401 : You are not authorized

mysql - 如何在 NodeJS 中的相同代码中返回 promise 并关闭 mysql 连接

java - “appletviewer”不被识别为内部或外部命令、可操作程序或批处理文件

java - 如何在Java中更改文件夹的名称

java - Java 中可以将对象声明为静态的吗?