mysql数据库转oracle数据库

mysql->oracle

前言

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

1.oracle的maven

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

ojdbc8 pom依赖库下载

orai18n pom依赖库下载

<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的兄弟可以自己去转换

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的版本问题

# 老版本使用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还是用服务名

#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判断是否为空,③如果确定要插入空数据,需要在启动类中加入下面的内容详情可见这篇文章

/*************对于是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中少写了一个,逗号

3.7Cause: java.sql.SQLSyntaxErrorException: ORA-00909: 参数个数无效

少些或多写参数、少加或多加连接符号(比如,或者and

posted @ 2024-04-28 18:40  芊嵛  阅读(64)  评论(0编辑  收藏  举报