与postgreSQL数据库连接的非法UTF-8序列

时间:2015-11-18 18:57:39

标签: java sql postgresql utf-8

我有以下代码连接到数据库

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

5 个答案:

答案 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,如果用户名错误,并且我的项目有两个文件,则应同时更改两个文件。