Eclipse PostgreSQL JDBC ping 失败

问题描述 投票:0回答:1

在 Eclipse 中,我尝试设置 PostgreSQL JDBC 连接并执行 ping 操作。 ping 失败并显示如下错误消息。我该如何修复它才能正常工作?

org.postgresql.util.PSQLException: The authentication type 10 is not supported. Check that you have configured the pg_hba.conf file to include the client's IP address or subnet, and that it is using an authentication scheme supported by the driver.
    at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:403)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:108)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
    at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125)
    at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
    at org.postgresql.jdbc3.Jdbc3Connection.<init>(Jdbc3Connection.java:24)
    at org.postgresql.Driver.makeConnection(Driver.java:393)
    at org.postgresql.Driver.connect(Driver.java:267)
    at org.eclipse.datatools.enablement.internal.postgresql.PostgreSQLJDBCConnection.createConnection(PostgreSQLJDBCConnection.java:87)
    at org.eclipse.datatools.connectivity.DriverConnectionBase.internalCreateConnection(DriverConnectionBase.java:105)
    at org.eclipse.datatools.connectivity.DriverConnectionBase.open(DriverConnectionBase.java:54)
    at org.eclipse.datatools.enablement.internal.postgresql.PostgreSQLJDBCConnection.<init>(PostgreSQLJDBCConnection.java:47)
    at org.eclipse.datatools.enablement.internal.postgresql.PostgreSQLConnectionFactory.createConnection(PostgreSQLConnectionFactory.java:51)
    at org.eclipse.datatools.connectivity.internal.ConnectionFactoryProvider.createConnection(ConnectionFactoryProvider.java:83)
    at org.eclipse.datatools.connectivity.internal.ConnectionProfile.createConnection(ConnectionProfile.java:359)
    at org.eclipse.datatools.connectivity.ui.PingJob.createTestConnection(PingJob.java:76)
    at org.eclipse.datatools.connectivity.ui.PingJob.run(PingJob.java:59)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

我在 Eclipse 中配置了 JDBC 3 和 4 连接,但都失败了。

但是,从命令行使用 psql 访问目标 PostgreSQL 数据库可以正常工作。

此外,还可以通过基于 Java 的 Squirrel SQL SQL 客户端使用 JDBC 访问目标 PostgreSQL 数据库。

java postgresql spring-boot eclipse jdbc
1个回答
0
投票

错误信息表明不支持认证类型10。您需要检查PostgreSQL服务器是否支持驱动程序使用的身份验证方案。您还需要确保 pg_hba.conf 文件已配置为包含客户端的 IP 地址或子网。

您可以尝试通过修改pg_hba.conf文件来更改PostgreSQL使用的身份验证方法。这是一个示例配置,允许本地网络的所有客户端使用密码身份验证进行连接:

# TYPE  DATABASE        USER            ADDRESS                 METHOD  
host    all             all             192.168.0.0/24          md5  

在此示例中,允许 192.168.0.0/24 子网中的客户端使用 md5 身份验证方法以任何用户身份连接到任何数据库。

您可以在 PostgreSQL 文档中找到有关配置 pg_hba.conf 文件的更多信息:https://www.postgresql.org/docs/current/auth-pg-hba-conf.html

您可能还想检查您使用的 JDBC 驱动程序是否与您的 PostgreSQL 版本兼容。您可以从官方网站下载 PostgreSQL 的最新 JDBC 驱动程序:https://jdbc.postgresql.org/download.html

最后,这是使用 JDBC 连接到 PostgreSQL 数据库的示例代码:

import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.SQLException;  
   
public class PostgreSQLJDBC {  
   public static void main(String[] args) {  
      Connection connection = null;  
      try {  
         // Load the PostgreSQL JDBC driver  
         Class.forName("org.postgresql.Driver");  
  
         // Create a connection to the database  
         String url = "jdbc:postgresql://localhost:5432/mydatabase";  
         String user = "myuser";  
         String password = "mypassword";  
         connection = DriverManager.getConnection(url, user, password);  
  
         // Test the connection  
         if (connection != null) {  
            System.out.println("Connected to the database!");  
         } else {  
            System.out.println("Failed to make connection!");  
         }  
      } catch (SQLException e) {  
         System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());  
      } catch (Exception e) {  
         e.printStackTrace();  
      } finally {  
         try {  
            if (connection != null)  
               connection.close();  
         } catch (SQLException e) {  
            e.printStackTrace();  
         }  
      }  
   }  
}  

将 mydatabase、myuser 和 mypassword 替换为适合您的数据库的值。

© www.soinside.com 2019 - 2024. All rights reserved.