hc学习平台

 找回密码
 立即注册
搜索
热搜: 活动 交友 javakc
 › 学习交流 › 项目难点 › 开发平台从oracle数据库迁移到mysql数据库引发的问题
查看: 1250|回复: 0
打印 上一主题 下一主题

开发平台从oracle数据库迁移到mysql数据库引发的问题

[复制链接]

8

主题

14

帖子

0

博客

baker_fu

Rank: 9 Rank: 9 Rank: 9

积分

IP 编辑 禁止 帖子 清理

跳转到指定楼层
楼主
发表于2018-12-14 11:47:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

问题描述开发平台原来使用的是oracle数据库,现在甲方要求使用mysql数据库,需要将Oracle数据迁移到mysql数据库。

数据层使用mybaits框架.

开发平台支持不同的数据库,更改配置,就可以更改数据库,分页是可以处理的(汇才的开发平台可以自定实现分页处理)


存在的问题:

但是,在mybaits的配置文件中,编写的sql却出现了问题,比如
例1:oracle的insert语句支持 insert tbl a(a.id,a.title,a.city) values(?,?,?)

Mysql不支持这种写法。这个问题解决并不难,后台会报错误


例2: oracle拼接sql使用|| ,mysql拼接sql使用concat函数:
Oracle的代码如下:

and a.title LIKE '%'||#{title}||'%' 

这段代码在mysql数据库下,竟然查询出笛卡尔积,而且后台显示的sql竟然不报错误,后台显示的sql很正常,将后台的sql copy到数据库客户端,可以正常执行。
百度都没有人遇到这个问题,反复尝试,找了3个小时的错误,mybatis的底层都通过反编译工具查遍了,也没有发现问题,最后把模糊查询改成精确查询,发现不出错了,才恍然大悟,是连接符出现了问题,应该写成这个样子:

and a.title LIKE CONCAT('%',#{title},'%') 


例3:oracle的函数在mysql中不能使用

比如日期格式转换成字符串,oracle数据库使用的是to_char,mysql数据库使用的date_format,好多位置需要修改啊

oracle数据库:select to_char(日期字段,'yyyy-mm-dd') from 表

mysql数据库:select date_format(日期字段,'%Y-%m-%d') from 表


例4:单引号中只有一个字符,当做数字用,

这是一个查询条件,当用户没有选择区时,area使用默认值:区;当用户选择区域时,area的值是0101,表示区的代码。

判断条件是,当用户没有选择区时,不拼接sql条件。

出现的问题是:当area的值是"区"时,这个判断条件null != area and '区' != area ,就会报错。


and a.area = #{area} 

后台总报这个错误:

java.lang.NumberFormatException: For input string: "区"] with root cause

如何解决的?

把区改成区域,就可以了


还存在一个问题,如果甲方不同意将区改成区域呢?那此问题又该如果解决。




站点统计|举报|Archiver|手机版|小黑屋|Comsenz Inc.

GMT+8, , Processed in 0.195171 second(s), 9 queries .

Powered by javakc! X1.0

© 2004-2014 javakc

f1208.com 备案号:京ICP备14030918号-1

返回顶部