【发布时间】:2021-03-02 07:50:50
【问题描述】:
我目前正在尝试使用 GraalVM 的本机映像工具和 Oracle 驱动程序。源代码编译生成exe文件,没有错误。但是当我启动程序时,它得到一个 java.lang.RuntimeException: Missing character set id 170 not loaded at image build time.
我正在使用字符集 NLS_CHARACTERSET = EE8MSWIN1250 连接到数据库。 当我使用 NLS_CHARACTERSET = AL32UTF8 的数据库时,连接工作正常。
我在 Windows 10 64 位计算机上使用 GraalVM CE 21.0.0.2(构建 11.0.10+8-jvmci-21.0-b06 和 ojdbc11-21.1.0.0.jar。
下面是错误信息和源代码。我使用了来自https://github.com/oracle/oracle-db-examples/blob/master/java/jdbc/ConnectionSamples/DataSourceSample.java的示例代码
线程“main”java.lang.RuntimeException 中的异常:在 oracle.jdbc.driver.DBConversion 的 oracle.sql.CharacterSet.make(CharacterSet.java:121) 的图像构建时未加载缺少的字符集 id 170。 init(DBConversion.java:184) 在 oracle.jdbc.driver.DBConversion.(DBConversion.java:137) 在 oracle.jdbc.driver.T4CConnection.doCharSetNegotiation(T4CConnection.java:2607) 在 oracle.jdbc.driver.T4CConnection。在 oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:1069) 在 oracle.jdbc.driver.T4CDriverExte 在 oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:644) 连接(T4CConnection.java:2176) nsion.getConnection(T4CDriverExtension.java:90) 在 oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:681) 在 oracle.jdbc.datasource.impl.OracleDataSource.getPhysicalConnection(OracleDataSource.java:569) 在 oracle.jdbc .datasource.impl.OracleDataSource.getConnection(OracleDataSource.java:355) 在 oracle.jdbc.datasource.impl.OracleDataSource.getConnectionInternal(OracleDataSource.java:2014) 在 oracle.jdbc.datasource.impl.OracleDataSource.getConnection(OracleDataSource.java :330) 在 oracle.jdbc.datasource.impl.OracleDataSource.getConnection(OracleDataSource.java:291) 在 DataSourceSample.main(DataSourceSample.java:24)
DataSourceSample.java
/* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.*/
import java.sql.SQLException;
import java.util.Properties;
import oracle.jdbc.pool.OracleDataSource;
import oracle.jdbc.OracleConnection;
import java.sql.DatabaseMetaData;
public class DataSourceSample {
final static String DB_URL= "jdbc:oracle:thin:@****:1525/****";
final static String DB_USER = "****";
final static String DB_PASSWORD = "****";
public static void main(String args[]) throws SQLException {
Properties info = new Properties();
info.put(OracleConnection.CONNECTION_PROPERTY_USER_NAME, DB_USER);
info.put(OracleConnection.CONNECTION_PROPERTY_PASSWORD, DB_PASSWORD);
info.put(OracleConnection.CONNECTION_PROPERTY_DEFAULT_ROW_PREFETCH, "20");
OracleDataSource ods = new OracleDataSource();
ods.setURL(DB_URL);
ods.setConnectionProperties(info);
try (OracleConnection connection = (OracleConnection) ods.getConnection()) {
DatabaseMetaData dbmd = connection.getMetaData();
System.out.println("Driver Name: " + dbmd.getDriverName());
System.out.println("Driver Version: " + dbmd.getDriverVersion());
System.out.println("Default Row Prefetch Value is: " +
connection.getDefaultRowPrefetch());
System.out.println("Database Username is: " + connection.getUserName());
System.out.println();
}
}
}
【问题讨论】:
标签: java oracle jdbc graalvm-native-image