返回顶部
首页 > 资讯 > 后端开发 > JAVA >(二)java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK
  • 934
分享到

(二)java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK

javasqljar 2023-09-05 08:09:51 934人浏览 安东尼
摘要

不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK (一)SQL state [99999]; error code [17056]; 不支持的字符集 (在类路径中添

不支持的字符集 (在类路径中添加 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

--结束END--

本文标题: (二)java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK

本文链接: https://lsjlt.com/news/394930.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作