使用Java 8和Postgres 10 Server以及v42.2.16 Postgresql驱动程序,我有一个基本的JDBC查询函数:
public List<Map<String, Object>> Query(String sql) throws Exception {
Connection con = null ;
PreparedStatement pstmt;
List<Map<String, Object>> resultSetToList = null;
try {
con = DriverManager.getConnection(ConnectionString, Properties);
pstmt = con.prepareStatement( sql );
pstmt.execute();
ResultSet resultSet = pstmt.getResultSet();
resultSetToList = resultSetToList(resultSet);
pstmt.close();
} catch(Exception e){
throw e;
}
finally {
if (con != null)
con.close();
}
return resultSetToList;
}我执行这样的查询:
Query("SELECT * FROM bi_functions");但它会抛出一个异常
org.postgresql.util.PSQLException: ERROR:编码"UTF8":0xa3的无效字节序列
数据库(由第三方提供)具有编码SQL_ASCII。0xA3是“英磅”字。
因此,我将查询更改为:
SET LOCAL CLIENT_ENCODING TO 'SQL_ASCII'; SELECT * FROM bi_functions;它失败了,因为:
org.postgresql.util.PSQLException:服务器的client_encoding参数被更改为SQL_ASCII。为了进行正确的操作,JDBC驱动程序需要client_encoding为UTF8。
是否有一种使用普通JDBC来避免此错误的方法?
发布于 2020-09-21 06:12:04
Java在内部使用Unicode编码,因此您不能在JDBC驱动程序中使用不同于client_encoding的UTF8。
您应该计算出数据库的实际编码(可能是ISO 8859或Windows编码之一)。然后使用该编码创建一个数据库,并转储原始数据库并将您的转储数据库加载到其中。
否则,您将无法在JDBC中使用此数据库。
https://stackoverflow.com/questions/63986397
复制相似问题