oracle 乱码(编码为AMERICAN_AMERICA.US7ASCII)问题解决

案例 :mysql数据同步到oracle

注意: 不要使用navicat,navicat有自己的编码,使用plsql客户端查看数据,plsql客户端与oracle编码保持一致即可

service类

本地用的多数据源

com.baomidou
dynamic-datasource-spring-boot-starter

 private final JdbcTemplate jdbcTemplate;private static final List<String> lableList = new ArrayList();static {lableList.add("doctor_id");lableList.add("dept_id");lableList.add("dept_name");lableList.add("doctor_name");lableList.add("doctor_title");}@SneakyThrows@Overridepublic List<SchSyncSchedule> syncHisToOracleAscii(String date){// 示例String sql = "SELECT *,CASE schedule_noon_code WHEN '0' THEN '上午' WHEN '1' THEN '下午' WHEN '2' THEN '全天'ELSE '' END as 'schedule_noon_code_str'" +"FROM `sch_sync_schedule` WHERE DATE_FORMAT( schedule_date, '%Y-%m-%d' ) >= DATE_FORMAT( '"+ date +"', '%Y-%m-%d' )";return jdbcTemplate.query(sql, rs -> {List<SchSyncSchedule> list = new ArrayList<>();// 获取ResultSet对象的列的数量、类型和属性。ResultSetMetaData md = rs.getMetaData();int columnCount = md.getColumnCount();if(rs.next()){Map<String, Object> rowData = new HashMap<>();while (rs.next()) {for (int i = 1; i <= columnCount; i++) {String columnLabel = md.getColumnLabel(i);if(lableList.contains(columnLabel)){String asciiString = getAsciiString(rs, columnLabel);rowData.put(columnLabel, asciiString);}else if(columnLabel.equals("schedule_noon_code_str")){String asciiString = getAsciiString(rs, columnLabel);rowData.put(columnLabel, asciiString);}else {rowData.put(md.getColumnLabel(i), rs.getObject(i));}}// 序列化成对象实体String jsonStr = JSONObject.toJSONString(rowData);SchSyncSchedule userBean = JSONObject.parseObject(jsonStr, SchSyncSchedule.class);log.info("转换为实体类对象:{}",userBean);list.add(userBean);}}return list;});}@SneakyThrowspublic String getAsciiString(ResultSet rs,String label){// 查询时数据转码// IOUtils.toString(rs.getAsciiStream(label),"GBK");// 插入时数据转码return new String(string.getBytes("GBK"),StandardCharsets.ISO_8859_1);}

整合封装

AsciiUtils
package cn.shunnengnet.icoupon.common.utils;import lombok.SneakyThrows;
import org.apache.commons.io.IOUtils;import java.sql.ResultSet;/***** @author qb* @date 2023/9/27 14:25* @version 1.0*/
public class AsciiUtils {@SneakyThrowspublic static String getAsciiString(ResultSet rs, String label){return IOUtils.toString(rs.getAsciiStream(label),"GBK");}}
TranscodingFunction
@FunctionalInterface
public interface TranscodingFunction<T1,T2,R> {R apply(T1 t1,T2 t2);}
QueryUtils
package cn.shunnengnet.icoupon.common.utils;import cn.shunnengnet.icoupon.common.utils.function.TranscodingFunction;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.util.Asserts;
import org.springframework.jdbc.core.JdbcTemplate;import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Predicate;/***** @author qb* @date 2023/9/27 15:05* @version 1.0*/public class QueryUtils{private TranscodingFunction<ResultSet,String,String> transcoding;private Consumer<String> consumer;private Predicate<String> isTranscoding;public static QueryUtils builder(){return new QueryUtils();}public QueryUtils setTranscoding(TranscodingFunction<ResultSet,String,String> transcoding){this.transcoding = transcoding;return this;}public QueryUtils extend(Consumer<String> consumer){this.consumer = consumer;return this;}public QueryUtils isTranscoding(Predicate<String> isTranscoding){this.isTranscoding = isTranscoding;return this;}public <T> List<T> query(JdbcTemplate jdbcTemplate, String sql, Class<T> clas){return jdbcTemplate.query(sql, rs -> {List<T> list = new ArrayList<>();// 获取ResultSet对象的列的数量、类型和属性。ResultSetMetaData md = rs.getMetaData();int columnCount = md.getColumnCount();Map<String, Object> rowData = new HashMap<>();while (rs.next()) {for (int i = 1; i <= columnCount; i++) {String columnLabel = md.getColumnLabel(i);// 自定义字段扩展if(null != consumer) consumer.accept(columnLabel);// 如果为true,则需要转码if(null != isTranscoding && isTranscoding.test(columnLabel)){Asserts.check(transcoding != null , "转码函数为空");String asciiString = transcoding.apply(rs,columnLabel);rowData.put(columnLabel, asciiString);} else {rowData.put(md.getColumnLabel(i), rs.getObject(i));}}String jsonStr = JSONObject.toJSONString(rowData);T times = JSONObject.parseObject(jsonStr, clas);list.add(times);}return list;});}}
最后使用方式
 @SneakyThrows@Overridepublic List<HpSyncScheduleTimesDhCurr> syncTimeToHisAscii(Set<String> codes) {StringBuilder sql = new StringBuilder("SELECT * FROM `hp_sync_schedule_times_dh_curr` WHERE schedule_item_code in (");Iterator<String> iterator = codes.iterator();while (iterator.hasNext()) {sql.append("'").append(iterator.next()).append("'");if(iterator.hasNext()){sql.append(",");}}sql.append(")");return QueryUtils.builder().setTranscoding(AsciiUtils::getAsciiString).isTranscoding(lableList::contains).query(jdbcTemplate, sql.toString(), HpSyncScheduleTimesDhCurr.class);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/93549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++内存对齐

原文在这里。https://blog.csdn.net/WangErice/article/details/103598081 但是内容有错误。我在自己的这里修改并变成红色了。 内存在使用过程并不是单一的依次排列&#xff0c;而是按照某种既定的规则来进行对齐&#xff0c;以方便快速访问.内存的对齐原则有以下三条&#…

深度学习与python theano

文章目录 前言1.人工神经网络2.计算机神经网络3.反向传播4.梯度下降-cost 函数1.一维2.二维3.局部最优4.迁移学习 5. theano-GPU-CPU theano介绍1.安装2.基本用法1.回归2.分类 3.function用法4.shared 变量5.activation function6.Layer层7.regression 回归例子8.classificatio…

【JavaScript】读取本地json文件并绘制表格

本文为避免跨域问题&#xff0c;使用了改造过的本地json文件的方法实现读取json数据并绘制表格。 如果发起http请求获取本地 json文件中数据&#xff0c;需要架设本地服务器&#xff0c;本文不做阐述。 概述 1、json在本地&#xff0c;并不需要从服务器下载。 2、采用jquery…

国庆作业day5

应用层&#xff1a;提供用户与网络应用程序之间的接口。表示层&#xff1a;负责数据的格式转换、加密和解密。会话层&#xff1a;负责建立、管理和终止会话。它提供会话控制和同步&#xff0c;允许应用程序之间建立连接和交换数据。传输层&#xff1a;提供端到端的连接。网络层…

postgresql-管理数据表

postgresql-管理数据表 创建表数据类型字段约束表级约束模式搜索路径 修改表添加字段删除字段添加约束删除约束修改字段默认值修改字段数据类型重命名字段重命名表 删除表 创建表 在 PostgreSQL 中&#xff0c;使用 CREATE TABLE 语句创建一个新表&#xff1a; CREATE TABLE …

专业PDF编辑阅读工具PDF Expert mac中文特点介绍

PDF Expert mac是一款专业的PDF编辑和阅读工具。它可以帮助用户在Mac、iPad和iPhone等设备上查看、注释、编辑、填写和签署PDF文档。 PDF Expert mac软件特点 PDF编辑&#xff1a;PDF Expert提供了丰富的PDF编辑功能&#xff0c;包括添加、删除、移动、旋转、缩放、裁剪等操作…

树莓派4B与STM32串口通信

目录 2上篇文章的补充 2.1 树莓派通信设置 3树莓派与STM32通信 3.1接线准备 3.2代码 3.2.1 STM32代码&#xff1a; 3.2.2树莓派代码&#xff1a; 2上篇文章的补充 2.1 树莓派通信设置 在上篇文章的基础上&#xff0c;进一步的设置 终端输入&#xff1a;sudo minicom …

v-for中的key

在Vue中&#xff0c;当使用v-for指令循环渲染元素时&#xff0c;添加:key是一个推荐做法&#xff0c;尤其是在循环的元素可能会被重新排序、添加或删除的情况下。 :key的作用是为每个循环的元素提供一个唯一的标识符&#xff0c;以便Vue能够跟踪和管理这些元素的状态。Vue使用…

从 0 到 1 ,手把手教你编写《消息队列》项目(Java实现) —— 核心类持久化存储

文章目录 一、持久化存储的方式与路径二、公共模块序列化 / 反序列化异常规定 三、持久化存储数据库数据管理文件数据管理读写规定新增 /删除规定内存中 Message 的规定存储规定代码编写 硬盘数据管理 一、持久化存储的方式与路径 交换机,队列,绑定关系,这些我们使用数据库来管…

四、浏览器渲染过程,DOM,CSSDOM,渲染,布局,绘制详细介绍

知识点&#xff1a; 1、为什么不能先执行 js文件&#xff1f;&#xff1f; 我们不能先执行JS文件&#xff0c;必须等到CSSOM构建完成了才能执行JS文件&#xff0c;因为前面已经说过渲染树是需要DOM和CSSOM构建完成了以后才能构建&#xff0c;而且JS是可以操控CSS样式的&#…

编程前置:处理Excel表格,定位单元格位置,输入文字前,让AI机器人知道我说什么

原提问&#xff1a; input输入表头 &#xff08;input内除了/&#xff0c;空格 回车 标点符号等 全部作为单元格分隔符&#xff09; 由我设置input输入的是行or列 给选项 1. 行 2. 列 默认回车或没输入值是列由我设置起始位置行列 例如 3,2 表示3行2列 当我输入3,2 就表示在第…

【Java】继承练习

继承的思想实现猫和狗的案例&#xff0c;并在测试类中进行测试 猫和狗——共同特性都是属于动物 1. 定义动物类&#xff08;Animal&#xff09; 成员变量&#xff1a;姓名&#xff0c;年龄构造方法&#xff1a;无参&#xff0c;带参成员方法&#xff1a;get/set 方法 2. 定义猫…

springboot的配置文件(properties和yml/yaml)

springboot的配置文件有两种格式分别是properties和yml/yaml 创建配置文件 在创建springboot项目时候&#xff0c;会默认生成application.properties这种格式 书写风格 端口 application.propertis server.port8080 application.yml server:port: 8080 连接数据库 applica…

<Xcode> Xcode IOS无开发者账号打包和分发

关于flutter我们前边聊到的初入门、数据解析、适配、安卓打包、ios端的开发和黑苹果环境部署&#xff0c;但是对于苹果的打包和分发&#xff0c;我只是给大家了一个链接&#xff0c;作为一个顶级好男人&#xff0c;我认为这样是对大家的不负责任&#xff0c;那么这篇就主要是针…

【计算机网络黑皮书】应用层

【事先声明】 这是对于中科大的计算机网络的网课的学习笔记&#xff0c;感谢郑烇老师的无偿分享 书籍是《计算机网络&#xff08;自顶向下方法 第6版&#xff09;》 需要的可以私信我&#xff0c;无偿分享&#xff0c;课程简介下也有 课程连接 目录 应用层网络应用的原理应用架…

作业 day4

完成父子进程通信

Socket通信

优质博文IT-BLOG-CN 一、简介 Socket套接字&#xff1a;描述了计算机的IP地址和端口&#xff0c;运行在计算机中的程序之间采用socket进行数据通信。通信的两端都有socket&#xff0c;它是一个通道&#xff0c;数据在两个socket之间进行传输。socket把复杂的TCP/IP协议族隐藏在…

Linux基本指令(二)

&#x1f493;博主个人主页:不是笨小孩&#x1f440; ⏩专栏分类:数据结构与算法&#x1f440; C&#x1f440; 刷题专栏&#x1f440; C语言&#x1f440; &#x1f69a;代码仓库:笨小孩的代码库&#x1f440; ⏩社区&#xff1a;不是笨小孩&#x1f440; &#x1f339;欢迎大…

接着聊聊如何从binlog文件恢复误delete的数据,模拟Oracle的闪回功能

看腻了文章就来听听视频演示吧&#xff1a;https://www.bilibili.com/video/BV1cV411A7iU/ delete忘加where条件&#xff08;模拟Oracle闪回&#xff09; 操作基本等同于上篇&#xff1a;再来谈谈如何从binlog文件恢复误update的数据&#xff0c;模拟Oracle的回滚功能 原理&a…

LCR 056.两数之和 IV

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;LCR 056. 两数之和 IV - 输入二叉搜索树 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 广度优先遍历二叉树的同时将已遍历过的节点值加入哈希表&#xff0c;若目标值与当前节点值之差存在…