环境

polardb版本

<dependency>
<groupId>com.aliyun</groupId>
<artifactId>polardb-jdbc18</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${lib.dir}/polardb-jdbc18.jar</systemPath>
</dependency>

mybatis版本

直接使用springboot引入

<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>

问题描述

javax.servlet.ServletException: org.springframework.dao.DataIntegrityViolationException:
### The error may exist in com/xx/templatedef/dao/oracle/XXTemplateDef_SqlMap.xml
### The error may involve com.xx.templatedef.dao.XXTemplateDefDao.selectTemplateDefByCategoryAndState-Inline
### The error occurred while setting parameters
### SQL: select * from act_xx_tem_def where category=? and deploy_state=1
### Cause: com.aliyun.polardb.util.PSQLException: 不良的类型值 long :
com.aliyun.polardb.util.PSQLException: canot convert the column of type BYTEA to requested type long;

原因

mybatis查询act_tem_def表涉及到blob字段(content_bytes),

默认的BlobTypeHandler的getBlob方法不适用, 需要重写handler

解决方案

  1. 在业务下重写BlobTypeHandler, 获取getBinaryStream然后转换byte数组

  2. mapper.xml -> resultmap中, 加入下述转换

    <result column="CONTENT_BYTES" property="contentBytes" jdbcType="BLOB"
    typeHandler="com.example.springbootpolardb.handler.PolarDbBlobTypeHandler"/>
  3. 转换逻辑

    public static byte[] toByteArray(InputStream input) throws IOException {
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    byte[] buffer = new byte[4096];
    int n = 0;
    while (-1 != (n = input.read(buffer))) {
    output.write(buffer, 0, n);
    }
    return output.toByteArray();
    }

代码

迁移polardb问题一的更多相关文章

  1. 阿里云PolarDB发布重大更新 支持Oracle等数据库一键迁移上云

    5月21日,阿里云PolarDB发布重大更新,提供传统数据库一键迁移上云能力,可以帮助企业将线下的MySQL.PostgreSQL和Oracle等数据库轻松上云,最快数小时内迁移完成.据估算,云上成本 ...

  2. PolarDB · 新品介绍 · 深入了解阿里云新一代产品 PolarDB

    背景意义 云计算为如今的互联网时代提供了更多的计算能力,乃至创造能力,关系型数据库作为所有应用不可或缺的重要部件,开箱即用,高性价加比特性的云数据库深受开发者的喜爱.作为一线的开发和运维人员,在阿里云 ...

  3. 你有什么理由还不选择阿里云服务器呢--从阿里云发布自研商用关系型数据库POLARDB想到的

    最近几天,阿里云发布自研商用关系型数据库POLARDB的消息可谓是重磅炸弹啊.借用官方宣传的话就是:6倍性能于MySQL并100%兼容/100TB存储容量/2分钟创建只读副本/3分钟创建容灾实例,第三 ...

  4. POLARDB · 最佳实践 · POLARDB不得不知道的秘密

    ## 前言 POLARDB作为阿里云下一代关系型云数据库,自去年9月份公测以来,收到了不少客户的重点关注,今年5月份商业化后,许多大客户开始陆续迁移业务到POLARDB上,但是由于POLARDB的很多 ...

  5. 云数据库PolarDB(一)

    一.出现的背景及PolarDB简介 阿里云,中国第一家拥有完整云计算能力的企业. 2015年,在计算界的奥运会Sort Benchmark中,阿里云计算100TB数据排序只用了不到7分钟,把Apach ...

  6. 云数据库POLARDB优势解读之①——10分钟了解

    什么是POLARDB POLARDB 是阿里云自研的下一代关系型分布式数据库,100%兼容MySQL,之前使用MySQL的应用程序不需要修改一行代码,即可使用POLARDB. POLARDB在运行形态 ...

  7. 比MySQL快6倍 深度解析国内首个云原生数据库POLARDB的“王者荣耀”

    随着移动互联网.电子商务的高速发展,被使用最多的企业级开源数据系统MySQL面临着巨大挑战——为迎接“双11"的高并发要提前做好分库分表;用户不断激增要将读写分离才能应对每天上亿次的访问,但 ...

  8. 用POLARDB构建客到智能餐饮系统实践

    在新零售成为大趋势的今天,餐饮行业也加入到这一浪潮之中.智能餐饮系统将帮助餐饮行业从多个维度提升自己的运营能力和收益,而打造智能餐饮系统SaaS化能力也成为了目前的一个热点.本文中果仁软件联合创始人& ...

  9. 阿里云PolarDB及其共享存储PolarFS技术实现分析(上)

    PolarDB是阿里云基于MySQL推出的云原生数据库(Cloud Native Database)产品,通过将数据库中计算和存储分离,多个计算节点访问同一份存储数据的方式来解决目前MySQL数据库存 ...

  10. 什么是云数据库POLARDB

    POLARDB是阿里巴巴自主研发的下一代关系型分布式云原生数据库,目前兼容三种数据库引擎:MySQL.Oracle.PostgreSQL.计算能力最高可扩展至1000核以上,存储容量最高可达 100T ...

随机推荐

  1. 贴代码框架PasteForm特性介绍之markdown和richtext

    简介 PasteForm是贴代码推出的 "新一代CRUD" ,基于ABPvNext,目的是通过对Dto的特性的标注,从而实现管理端的统一UI,借助于配套的PasteBuilder代 ...

  2. Webshell流量分析之哥斯拉Godzilla&冰蝎Behinder

    目录 哥斯拉 冰蝎 哥斯拉和冰蝎相较于菜刀蚁剑,它们的通信流量是加密的,有比较好的抗检测能力. 菜刀和蚁剑流量分析:Webshell流量分析之菜刀Chopper&蚁剑AntSword 哥斯拉 ...

  3. 微信小游戏sdk接入支付和登录,解决了wx原生不支持ios支付的痛点

    前情提要 微信小游戏是小程序的一种. 项目接入微信小游戏sdk的支付和登录.主要难点在于接入ios的支付.因为官方只支持android, 不支持ios. 即ios用户不能直接在小游戏中发起支付,参考市 ...

  4. mysql - 修改字段名称 & 修改字段数据类型

    修改字段名称: ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>: mysql> ALTER TABLE ...

  5. vue结合element UI做checkbox全选的tree结构

    由于element UI中的tree可能不能满足项目中的样式需求,所以自己动手结合element中的checkbox全选功能实现了一个符合项目需求的tree.效果如下: html部分: <tem ...

  6. canvas(七)绘制网格和坐标轴

    1.绘制网格 传入dom和分割线间隔进行渲染,网格线分为水平方向和垂直方向 <script> //绘制网格 function drwaGrid(dom = document.querySe ...

  7. C# 获取两经纬度之间的距离

    C# 获取两经纬度之间的距离 迷恋自留地 //地球半径,单位米 private const double EARTH_RADIUS = 6378137; /// <summary> /// ...

  8. Docker Logs清理

    查看docker日志路径 docker inspect --format='{{.LogPath}}' <container_name_or_id> 清理docker日志 echo |su ...

  9. 深入聊聊async&Promise

    正文 最近在学习JavaScript里的async.await异步,对于其中的Promise状态以及背后的Js引擎实际运行状态不大理解且很感兴趣,因此花了一点时间仔细研究了一下. 从Example说起 ...

  10. Flutter之GetX之路由管理

    GetX之路由管理 GetX有一套完整的路由管理,并且不需要context上下文,API非常简洁 直接导航 导航到新的页面 Get.to(NextScreen()); 返回,此方法可以用于关闭Snac ...