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

这篇具有很好参考价值的文章主要介绍了(二)java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

1、启动报错

java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK
详细报错内容:
(二)java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK,常见报错问题,# 数据库及分布式事务,java,sql,jar

2、背景

使用 JDBC 连接Oracle数据库时出现报错。示例代码如下:

DataSourceConnectionUtils.java

package com.example.jdbctemplateproject.utils;

import java.sql.*;
import java.util.HashMap;
import java.util.Map;

/**
 * 数据源连接工具
 *
 * @author: shipleyleo
 * @create: 2023-04-07 17:32:16
 */
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

		<!-- Oracle 驱动包 -->
		<dependency>
			<groupId>com.oracle.database.jdbc</groupId>
			<artifactId>ojdbc8</artifactId>
			<version>21.5.0.0</version>
			<scope>runtime</scope>
		</dependency>
		<!-- Additional library required to support Internationalization -->
		<dependency>
			<groupId>com.oracle.database.nls</groupId>
			<artifactId>orai18n</artifactId>
			<version>21.5.0.0</version>
			<scope>provided</scope>
		</dependency>

3、原因分析

根据提示,报错是由于缺少字符集相关的 orai18n 依赖包所致。但是检查 pom.xml 文件,发现有配置 orai18n 依赖包。经排查测试,发现跟<scope>标签内的取值有关。当 scope 取值为 provided、test (不支持运行期)时,执行main方法会出现报错;当 scope 取值为 runtime、compile (支持运行期)时,执行main方法不会出现报错。

(二)java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK,常见报错问题,# 数据库及分布式事务,java,sql,jar

4、解决方案

将 scope 的值改为 runtime 或者 compile(当然,也可以直接将 scope标签去掉,系统会默认选择compile)。如下所示:

pom.xml

		<!-- Additional library required to support Internationalization -->
		<dependency>
			<groupId>com.oracle.database.nls</groupId>
			<artifactId>orai18n</artifactId>
			<version>21.5.0.0</version>
			<scope>compile</scope>
		</dependency>

参考资料文章来源地址https://www.toymoban.com/news/detail-708830.html

  • maven 中 scope标签的作用(runtime、provided、test、compile 的作用)

到了这里,关于(二)java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java基础——IO流之字符集

    (1)IO前置内容:字符集 1.字符集基础知识: 计算机底层不可以直接存储字符,只能存储二进制(0,1)。 二进制可以转换成十进制。 计算机底层可以表示十进制编号。计算机可给人类字符进行编号存储,这套编号规则就是字符集。 2.ASCII字符集:(1字节) ASCII(American S

    2023年04月17日
    浏览(45)
  • java中http请求,记得加字符集 UTF-8,StringEntity

    http请求经常会遇到一些奇怪的问题,例如发送请求失败,或者response出现问题,或者参数中带了url调接口失败,调用微信接口失败,调用nginx转发失败,等等。 但用postman调用不会有问题。 这说明参数本身没有问题,服务器也没有问题,是客户端的问题。在你的代码里面,客

    2024年02月07日
    浏览(53)
  • 华为OD机试之全量和已占用字符集(Java源码)

    题目描述 给定两个字符集合,一个是全量字符集,一个是已占用字符集,已占用字符集中的字符不能再使用。 输入描述 输入一个字符串 一定包含@,@前为全量字符集 @后的为已占用字符集 已占用字符集中的字符一定是全量字符集中的字符 字符集中的字符跟字符之间使用英文

    2024年02月07日
    浏览(54)
  • 【华为OD机试】全量和已占用字符集(python, java, c++, js)

    前言 :本专栏将持续更新华为OD机试题目,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于OD机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email:nansun0903@163.com;备注:CSDN。 给定两个字符集合,一个为全

    2024年02月11日
    浏览(45)
  • 【华为OD机考 统一考试机试C卷】 全量和已占用字符集 、字符串统计(C++ Java JavaScript Python)

    2023年11月份,华为官方已经将 华为OD机考:OD统一考试(A卷 / B卷)切换到 OD统一考试(C卷)和 OD统一考试(D卷) 。根据考友反馈:目前抽到的试卷为B卷或C卷/D卷,其中C卷居多 ,按照之前的经验C卷部分考题会复用A卷,B卷题,博主正积极从考过的同学收集C卷和D卷真题。

    2024年02月05日
    浏览(38)
  • MySQL 字符集概念与原理及如何配置字符集 - 超详细图文详解

    目录 一、字符集概念 1、字符(Character) 2、字符编码 3、字符集(Character set) 二、字符集原理 1、ASCII字符集 2、GB2312 3、GBK 4、GB18030 5、BIG5 6、Unicode 编码 三、字符序 四、MySQL字符集 字符序 1、mysql 字符集 2、mysql 字符序 3、字符集与字符序的关系 五、MySQL 数据存储字符集

    2024年02月04日
    浏览(56)
  • 算法加密与解密、字符编码与字符集

    加密保证数据不会被窃取或者修改 哈希算法 压缩映射 :散列又称为哈希,是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。 哈希算法(Hash)又称摘要算法(Digest),哈希算法的目的就是为了验证原始数据是否被篡改。 主流的散列算法有MD5和

    2024年02月03日
    浏览(55)
  • 有限字符集的字符串压缩算法

    在开发中,经常有上报线上堆栈来分析处理线上问题的场景,所以,对堆栈的压缩和加密也是必不可少的。加密:可以使用AES对称加密算法,压缩:可以在上传时利用protobuf天生的压缩性对字符串进行压缩。 不过,出于对流量的节省和传输效率的提升,可以通过在堆栈上传前

    2024年02月11日
    浏览(66)
  • (三) MySQL字符集

    MySQL字符集包括 基字符集 (CHARACTER)与 校对规则 (COLLATION)这两个概念: latin1支持西欧字符、希腊字符等 gbk支持中文简体字符 big5支持中文繁体字符 utf8几乎支持世界所有国家的字符 utf8mb4是真正意义上的utf-8 查看当前数据库默认的字符集: SHOW VARIABLES like \\\'character%\\\'; MySQL在

    2024年01月24日
    浏览(60)
  • Linux字符集详解

    计算机中处理和储存信息都是用二进制数表示的;而我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果。通俗的说,按照某种规则将字符存储在计算机中,如’a’用97表示,称为\\\"编码\\\";反之,将计算机中的二进制数解析显示出来,称为\\\"解码\\\"。在解码过程中,

    2024年02月06日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包