postgresql - Java PostgreSQL:连接失败时抑制错误输出
问题描述
我正在使用 java 连接到 postgreSQL 数据库。
用户在命令行中输入用户名和密码,然后我测试连接。我在它周围放了一个 try-catch 块,但是当连接失败时它仍然会打印一条错误消息。我不希望用户看到这条消息,我只想自己处理错误,这通常可以通过 try-catch 构造来实现。但是,在这种特殊情况下,无论如何都会打印消息。我怎样才能在这里压制消息?
相关代码:
import java.sql.*;
public class ChessDatabase {
private Connection chessDB;
private String username;
private String password;
ChessDatabase(String username, String password) {
this.username = username;
this.password = password;
}
public boolean isConnected() {
try {
chessDB = DriverManager.getConnection("jdbc:postgresql://[...]", username, password);
} catch (Exception e) {
return false;
}
return true;
}
}
错误信息:
Jun 25, 2018 3:38:24 PM org.postgresql.core.v3.ConnectionFactoryImpl log
WARNING: SQLException occurred while connecting to [...]
org.postgresql.util.PSQLException: FATAL: PAM authentication failed for user "[...]"
at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:473)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:205)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195)
at org.postgresql.Driver.makeConnection(Driver.java:452)
at org.postgresql.Driver.connect(Driver.java:254)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
at ChessDatabase.isConnected(ChessDatabase.java:35)
[...]
Jun 25, 2018 3:38:24 PM org.postgresql.Driver connect
SEVERE: Connection error:
org.postgresql.util.PSQLException: FATAL: PAM authentication failed for user "[...]"
at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:473)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:205)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195)
at org.postgresql.Driver.makeConnection(Driver.java:452)
at org.postgresql.Driver.connect(Driver.java:254)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
at ChessDatabase.isConnected(ChessDatabase.java:35)
[...]
PS:为了澄清起见,如果用户名和密码正确,则连接有效,并且不会打印错误消息。所以问题不在于消除错误,而在于消除消息。
解决方案
感谢 JB Nizet 提供的链接,我可以发现我可以附加"?loggerLevel=OFF"
到DriverManager.getConnection()
. 这样消息就不会被打印出来。
推荐阅读
- mongodb - MongoDB - 使用文档字段作为变量
- python - 制表符分隔的文件无法正确读取,在 pandas 读取时寻找自定义拆分
- git - 在 Git 中合并 Framemaker 文件
- java - Google Admob API - Java 客户端 - com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
- java - 如何创建一个布局,其中任何小部件都不可点击?
- sql-server - Visual Studio 的连接管理器 OLE DB 目标编辑器中缺少“新建”按钮
- javascript - 在 map 函数中异步调用 API (React)
- grails - grails 3.3.10 设置 server.connection-timeout 后未超时
- azure - 在 terraform for Azure 中创建 VPC 的语法是什么?
- flutter - Flutter web passwordless login does not trigger auth state change