在 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 数据库。
错误信息表明不支持认证类型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 替换为适合您的数据库的值。