Java postgresql驱动程序9.4和Postgres安装9.6的UTF-8序列无效
我已经安装了最新的PostgreSQL版本:9.6 我使用的是postgresql驱动程序版本9.4-1206-jdbc42——在maven存储库中找不到更新的 当我尝试连接时,会出现异常:Java postgresql驱动程序9.4和Postgres安装9.6的UTF-8序列无效,java,postgresql,jdbc,osgi,Java,Postgresql,Jdbc,Osgi,我已经安装了最新的PostgreSQL版本:9.6 我使用的是postgresql驱动程序版本9.4-1206-jdbc42——在maven存储库中找不到更新的 当我尝试连接时,会出现异常: Caused by: java.io.IOException: Ungültige UTF-8-Sequenz: das erste Byte ist 10xxxxxx: 179 at org.postgresql.core.UTF8Encoding.decode(UTF8Encoding.java
Caused by: java.io.IOException: Ungültige UTF-8-Sequenz: das erste Byte ist 10xxxxxx: 179
at org.postgresql.core.UTF8Encoding.decode(UTF8Encoding.java:98)
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)
... 49 more
应用程序部署在OSGi容器中,数据源使用PAX配置文件进行配置:
osgi.jdbc.driver.class=org.postgresql.Driver
url=jdbc:postgresql://localhost:5432/test
dataSourceName=test
user=test
password=test
protocolVersion=3
这里怎么了?这是驱动程序版本和数据库安装之间的不兼容吗?我应该降级吗
数据库使用UTF-8编码
在独立java应用程序中,以下代码是成功的:
ConnectionPool pool = new ConnectionPool();
pool.setUrl("jdbc:postgresql://localhost:5432/test");
pool.setUser("test");
pool.setPassword("test");
pool.setProtocolVersion(3);
Connection conn = pool.getConnection();
所以它看起来更像是和平问题…实际问题在其他地方。在pg_hba.conf中将授权方法从'md5'更改为'trust'后,我得到了真正的错误消息:找不到角色“test”
PAX在用户名后面加了尾随空格,这很容易监督,PostgreSQL驱动程序无法解码来自服务器的错误消息。
9.4-1206-jdbc42
没有那么旧,但最近的是(postgresql jdbc驱动程序在版本编号上跳了很多,以避免这样的误解:9.4应该支持9.6服务器)——而且,它现在已经有2天了:)