将mysql转为oracle

mysql->oracle

前言

今天的任务是把用mysql数据库编写的程序转成oracle,这也是我第一次用oracle可谓是错误百出啊。下载oracle?NO在公司我们不需要本地下载oracle,(如果你是想自己学习当我没说,不魔法下载很慢,有时间我会写一篇系统性的文章写oracle的运用),当我下载完oracle本地数据库看收到怀疑的眼神我悟了,只需要下载一个可视化界面我们远程连接他的数据库就好了(这里我使用的是Oracle SQL Developer这里附上下载地址)。哈哈第一次嘛,难免难免,作为拥有==bug系统==的我习以为常,不会就查,再不会就问,没有解决不了的的问题!

1.oracle的maven

需要什么版本可以自己搜索

ojdbc8 pom依赖库下载

orai18n pom依赖库下载

xml 复制代码
<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>19.11.0.0</version>
</dependency>

<!- 
	如果不加会报下面的错误
	Cause: java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK
-->
<dependency>
    <groupId>com.oracle.database.nls</groupId>
    <artifactId>orai18n</artifactId>
    <version>19.11.0.0</version>
</dependency>

2.oracle的application.yml配置

喜欢用application.properties的兄弟可以自己去转换

yml 复制代码
spring:
datasource:
# 请看3.2
# SID
#url: jdbc:oracle:thin:@127.0.0.1:6666:ocrl
# 服务名
url: jdbc:oracle:thin:@127.0.0.1:6666/ocrl
username: username			# 根据实际填写
password: password			# 根据实际填写
# 请看3.1
# 老ojdbc8以前
#    driver-class-name: oracle.jdbc.driver.OracleDriver
# 新
driver-class-name: oracle.jdbc.OracleDriver
max-idle: 10
max-wait: 10000
min-idle: 5
initial-size: 5

3.报错解决

3.1Registered driver with driverClassName=oracle.jdbc.driver.OracleDriver was not found, trying direct instantiation.

这个是一个警告,不处理不影响运行,我大抵是有点代码洁癖

出现原因:这个警告是我在网上看oracle配置时按照广大网友的推荐cv,成功警告。主要原因是ojdbc的版本问题

properties 复制代码
# 老版本使用ojdbc8以下,当然我没咋尝试有小伙伴感兴趣可以出个各个版本测试,一点要记得@我
driver-class-name: oracle.jdbc.driver.OracleDriver
# 新版本使用
driver-class-name: oracle.jdbc.OracleDriver

3.2HikariPool-1 - Exception during pool initialization.并且java.sql.SQLException: Listener refused the connection with the following error:ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

出现原因:yml的url配置有问题

可以打开你的数据库属性看看你的连接方式是SID还是用服务名

properties 复制代码
#SID方式
url: jdbc:oracle:thin:@127.0.0.1:6666:ocrl
#服务名方式
url: jdbc:oracle:thin:@127.0.0.1:6666/ocrl

3.3Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束

这个错误出现在sql语句中,可以查看一下你的mapper中的sql语句最后是不是加了分号,在oracle中测试加分号的也能运行但是写在代码中就不能运行了,去掉即可

3.4Cause: java.sql.SQLException: 无效的列类型: 1111,cause by:{}

插入时由于我加了两个字段导致,前端少传导致,解决方法①修改前端,②通过if判断是否为空,③如果确定要插入空数据,需要在启动类中加入下面的内容详情可见这篇文章

java 复制代码
/*************对于是ORACLE 数据库的 mybatis必须增加如下的配置*********Start */
@Bean
public ConfigurationCustomizer configurationCustomizer() {
    return new MybatisPlusCustomizers();
}

class MybatisPlusCustomizers implements ConfigurationCustomizer {
    @Override
    public void customize(org.apache.ibatis.session.Configuration configuration) {
        configuration.setJdbcTypeForNull(JdbcType.NULL);
    }
}
/*************对于是ORACLE 数据库的 mybatis必须增加如下的配置*********End */

3.5Cause: java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符

这个问题出现在字段属性上,在mysql中对于特殊的关键字我们会加一个反单引号==`==进行区分,但是他在oracle中没有这种操作,可以在oracle中运行一下在放到mapper.xml

3.6Cause: java.sql.SQLSyntaxErrorException: ORA-01745: 无效的主机/绑定变量名

我是在插入语句出现的这个,最后排查发现在value中少写了一个,逗号

相关推荐
Bert.Cai11 分钟前
MySQL LPAD()函数详解
数据库·mysql
norq juox2 小时前
MySQL 导出数据
数据库·mysql·adb
尚雷55803 小时前
从电商订单支付更新,吃透 Oracle 数据修改的底层设计哲学与全组件协同原理
数据库·oracle
李兆龙的博客3 小时前
从一到无穷大 #70 从 LR 图 PEC 到InfluxQL兼容性差分测试方法论与工程实践
数据库·功能测试·oracle
ReaF_star3 小时前
【环保】CentOS 7 安装 MySQL 8 实战记录:从安装到排障一次讲清
linux·mysql·centos
qiuyunoqy3 小时前
MySQL - 2
数据库·mysql
y = xⁿ3 小时前
MySQL学习笔记:乐观锁VS悲观锁/八股总结
笔记·学习·mysql
张子行的博客5 小时前
SQL 调优实战:跨表排序性能提升之路
数据库·sql·oracle
FinTech老王6 小时前
逻辑删除不等于物理销毁:KingbaseES敏感数据标记与销毁实操指南
数据库·安全·oracle
池佳齐6 小时前
软考高级系统架构设计师备考(十八):数据库系统—事务管理与并发控制
数据库·oracle·系统架构