我有以下代码连接到数据库
String host = "jdbc:postgresql://localhost:5432/name";
String username = "user";
String password = "pass";
Connection c = null;
try {
Class.forName("org.postgresql.Driver");
c = DriverManager.getConnection(host, username, password);
} catch (Exception e) {
e.printStackTrace();
System.err.println(e.getClass().getName() + ": " + e.getMessage());
System.exit(0);
}
System.out.println("Opened database successfully");
}
我收到以下错误:
org.postgresql.util.PSQLException: El intento de conexión falló.
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:257)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:65)
at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:149)
at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:35)
at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:22)
at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:47)
at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:30)
at org.postgresql.Driver.makeConnection(Driver.java:414)
at org.postgresql.Driver.connect(Driver.java:282)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at database_console.DBConnect.main(DBConnect.java:22)
Caused by: java.io.IOException: Illegal UTF-8 sequence: byte 2 of 4 byte sequence is not 10xxxxxx: 110
at org.postgresql.core.UTF8Encoding.checkByte(UTF8Encoding.java:28)
at org.postgresql.core.UTF8Encoding.decode(UTF8Encoding.java:117)
at org.postgresql.core.PGStream.ReceiveString(PGStream.java:327)
at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:424)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:203)
... 11 more
org.postgresql.util.PSQLException: El intento de conexión falló.
“意图deconexiónfalló”意味着“连接尝试失败”。
请帮助我,我不知道该怎么做。
编辑:我还检查了服务器编码,它说它是UTF8
答案 0 :(得分:1)
我认为问题可能是java字符串是UTF-16而Postgresql需要UTF-8参数。
尝试这种语法:
Properties props = new Properties();
props.setProperty("user","user");
props.setProperty("password","pass");
c = DriverManager.getConnection(host, props);
希望这会有所帮助
答案 1 :(得分:1)
我知道这个问题现在有点老了。但我遇到了同样的问题,结果是 pg_hba.conf 文件中的连接 METHOD 。
我有默认推荐的md5配置,但似乎某些版本的JDBC驱动程序中存在错误(https://www.postgresql.org/message-id/3E43175C.5020209%40xythos.com)
所以我通过在 pg_hba.conf 文件中将 md5 更改为信任来修复它,以便它以明文形式接受密码。
托管所有127.0.0.1/32 信任
希望这有助于某人
答案 2 :(得分:0)
如果您使用的是Windows,则需要使用双斜杠:
String host = "jdbc:postgresql:////localhost:5432//name";
答案 3 :(得分:0)
就我而言,这个问题很简单,但例外情况不明确。
我的连接URL中唯一的问题是连接结束时的DBNAME。 数据库名称根本不存在,从未创建过,作为最终结果,我收到了无效字符的反馈。
确保您的连接设置实际有效,请仔细检查URL中的数据库名称。在尝试以编程方式连接到数据库之前,请使用pgadmin来验证数据库是否存在。
答案 4 :(得分:0)
此问题的解决方案:我使用application.properties
文件连接PostgreSQL
,如果用户名错误,并且我的项目有两个文件,则应同时更改两个文件。