将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中少写了一个,逗号

相关推荐
容器( ु⁎ᴗ_ᴗ⁎)ु.。oO1 小时前
MySQL事务
数据库·mysql
数据龙傲天2 小时前
1688商品API接口:电商数据自动化的新引擎
java·大数据·sql·mysql
engineer-gxd3 小时前
MySQL 表的操作
mysql
cyt涛3 小时前
MyBatis 学习总结
数据库·sql·学习·mysql·mybatis·jdbc·lombok
看山还是山,看水还是。4 小时前
MySQL 管理
数据库·笔记·mysql·adb
momo小菜pa4 小时前
【MySQL 09】表的内外连接
数据库·mysql
Jasonakeke5 小时前
【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化
数据库·mysql
小宇成长录5 小时前
Mysql:数据库和表增删查改基本语句
数据库·mysql·数据库备份
团儿.6 小时前
解锁MySQL高可用新境界:深入探索MHA架构的无限魅力与实战部署
数据库·mysql·架构·mysql之mha架构
权^7 小时前
MySQL--聚合查询、联合查询、子查询、合并查询(上万字超详解!!!)
大数据·数据库·学习·mysql