不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK
文章目录
1、启动报错
java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK
详细报错内容:
2、背景
使用 JDBC 连接Oracle数据库时出现报错。示例代码如下:
DataSourceConnectionUtils.java
package com.example.jdbctemplateproject.utils;import java.sql.*;import java.util.HashMap;import java.util.Map;public class DataSourceConnectionUtils { public static void jdbcTest(String url, String username, String password) throws ClassNotFoundException, SQLException { //注册driver Class.forName("oracle.jdbc.driver.OracleDriver");//建立数据库连接对象 Connection conn = DriverManager.getConnection(url, username, password);//建立操作对象 Statement stmt = conn.createStatement();//结果集 ResultSet rs = stmt.executeQuery("select * from student"); while(rs.next()) { // 转换每行的返回值到 Map 中 System.out.println("id:" + rs.getLong("id") + ",name:" + rs.getString("name")); }//依次关闭结果集,操作对象,数据库对象 if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } public static void main(String[] args) { try { jdbcTest("jdbc:oracle:thin:@localhost:1521:orcl", "system", "*********"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } }}
下面是已添加的Oracle驱动包、支持字符集的依赖包。
pom.xml
<dependency><groupId>com.oracle.database.jdbcgroupId><artifactId>ojdbc8artifactId><version>21.5.0.0version><scope>runtimescope>dependency><dependency><groupId>com.oracle.database.nlsgroupId><artifactId>orai18nartifactId><version>21.5.0.0version><scope>providedscope>dependency>
3、原因分析
根据提示,报错是由于缺少字符集相关的 orai18n 依赖包所致。但是检查 pom.xml 文件,发现有配置 orai18n 依赖包。经排查测试,发现跟
标签内的取值有关。当 scope 取值为 provided、test (不支持运行期
)时,执行main方法会出现报错;当 scope 取值为 runtime、compile (支持运行期
)时,执行main方法不会出现报错。
4、解决方案
将 scope 的值改为 runtime 或者 compile(当然,也可以直接将 scope标签去掉,系统会默认选择compile)。如下所示:
pom.xml
<dependency><groupId>com.oracle.database.nlsgroupId><artifactId>orai18nartifactId><version>21.5.0.0version><scope>compilescope>dependency>
参考资料
来源地址:https://blog.csdn.net/Shipley_Leo/article/details/130018181