精华内容
下载资源
问答
  • 每个项目的application.yml文件中只能有一个数据源,否则运行报错,这里采用的是新建两个yml文件(application-mysql.ymlapplication-oracle.yml),如下图 然后将各自的数据源信息编写进各自的yml...

    1.需求说明
    注:此文档并不是程序运行过程中动态的切换数据源,而是需要手动修改yml文件,选择所要使用的数据库。
    2.实现步骤
    1):修改配置文件
    每个项目的application.yml文件中只能有一个数据源,否则运行报错,这里采用的是新建两个yml文件(application-mysql.yml和application-oracle.yml),如下图
    在这里插入图片描述
    然后将各自的数据源信息编写进各自的yml文件中:

    在这里插入图片描述在这里插入图片描述

    后续选择不同的数据库只需修改主配置文件即可(通过主配置文件加载其他的配置文件):
    在这里插入图片描述

    2):编写不同的sql语句
    每个数据库的sql语句都有差异,可以通过mapper文件中databaseId的属性,编写不同数据库所对应的sql语句;
    如下图所示:
    在这里插入图片描述
    在这里插入图片描述

    如要使用databaseId的属性,就需要配置,这里选择的配置方式是在主配置类增加一个bean的配置如下:
    在这里插入图片描述

    在这段代码中,给Properties设置了两个对象,对应着两种数据库,一个是oracle,一个是mysql。key的值是对应的数据库的productName,value则是一个自定义的值,你可以取一个你喜欢的名字,这个名字会在mybatis的mapper里面用到。
    后续如想兼容其他数据库,如达梦7数据库只需:
    在这里插入图片描述

    便可以使用databaseId的属性,编写不同数据库对应的sql语句

    展开全文
  • 最近公司给我一个任务,把现有项目由Mysql切换成Oracle,而且还要求兼容Mysql和Oracle数据库。网上有很多类似的资源,说了这两个数据库的差别,但是没有进行完整的总结。在这个任务完成后,我在这里总结一下。 1....

    最近公司给我一个任务,把现有项目由Mysql切换成Oracle,而且还要求兼容Mysql和Oracle数据库。网上有很多类似的资源,说了这两个数据库的差别,但是没有进行完整的总结。在这个任务完成后,我在这里总结一下。

    1.原有的mysql的insert语句,没有做空判断,也没有指定jdbc类型,当换成Oracle时,插入数据就报错了,总是提示“索引错误,不能将null值插入到某个字段中”。意思就是如果插入的某个对象的某个字段值为空是,insert语句就会报错了。

    解决办法:

    网上总结说,values值指定jdbc类型就可以了

    但是这个始终不是最终解决办法,当把null值insert的时候,又会报不能给null值指定jdbc类型。所以最好的办法,就是字段和value值都做非空判断!

    2.Oracle的mapper文件中,insert的sql语句不要写useGeneratedKeys="true" 和 keyProperty="id",首先Oracle是不支持主键生成的,所以useGeneratedKeys肯定会报错。要兼容Mysql和Oracle,id最好通过代码来生成,插入的时候给id设置。entity.setId(UUIDUtils.getUUID());那么也就用不上返回刚刚插入的id的用途了,直接通过代码得到刚刚的id即可。而且keyProperty属性也不能写,否则会改变id的值。

    比如,如果insert语句使用了keyProperty="id":

    String id = UUIDUtils.getUUID();

    entity.setId(id );

    userDao.insert(entity);

    System.out.println(id);

    此时,System.out.println(id);输出的id值就跟上面第一句代码的id不一样了。

    3.Mybatis+Oracle二次插入有问题

    当数据库为Mysql的时候,数据插入是没有问题的。但是切换至Oracle的时候,第一次插入无异常,第二次插入的时候就提示索引异常,但是id明明是有的,且不重复的。

    解决办法:

    注释PSCache配置代码
    <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
            <!--如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false。分库分表较多的数据库,建议配置为false。-->
            <!--<property name="poolPreparedStatements" value="true" />-->
            <!--<property name="maxPoolPreparedStatementPerConnectionSize" value="20" />-->

    4.Mysql和Oracle的一些sql函数差异

    4.1 UUID(); Mysql是可以使用这个函数的,并通过sql语句生成ID,但是Oracle是无法识别的,所以为了兼容两个数据库,最好通过代码生成id,然后直接insert对应的id即可

    4.2 DATE_FORMAT()  很多时候关于表单查询都会有时间范围查询,比如查询开始时间到结束时间的某些数据。这时候如果数据库字段存储的是字符串类型的时间戳,那么比较时间时候就要进行格式转化。

    Msql就是通过DATE_FORMAT()进行转换的。

    Select * From user Where DATE_FORMAT(birthday,'%m-%d') >= '06-03' and DATE_FORMAT(birthday,'%m-%d') <= '07-08';

    但是Oracle是通过to_date()函数转换的

    SELECT * FROM testdatetime t WHERE 1=1 AND to_date(t.createdate,'yyyy-MM-dd') between to_date('2011-06-01','yyyy-MM-dd') and to_date('20110705','yyyymmdd') ;  

    所以为了进行兼容处理,要使用CDATA函数,那么两者都可以兼容了

    
    
    

    4.3  CONCAT()函数,模糊查询为了防止sql注入,Mysql+Mybaits是用CONCAT()函数,但是Oracle用的是instr()函数。所以为了两者都可以使用,所有的模糊查询只能用like来解决了

    4.4 limit 分页查询。Mysql的分页是limit,但是Oracle的是rownumber,所以分页不要在sql语句中做处理。通过拦截器即可

    Map<String, Object> page = etlTaskService.getPage(params, new PageBounds(currentPageNo,pageSize, true));
    

    在Mybatis的配置文件中,加入此插件。每个公司的分页拦截器用的可能都不一样,不过大同小异

    4.5 获取当前时间的差异。很多时候,当我们做新增和修改时候,创建时间和修改时间都喜欢取系统时间,在sql中指定即可,但是。Mysql用的是select now();函数,Oracle则是select sysdate from dual;所以鉴于两者的差异,这种时间处理也要跟id一样,通过代码来进行处理,不要在sql中处理。

    以上,为Mysql切换Oracle数据库,并且系统要求兼容Mysql+Oracle的一些技术总结。欢迎大家点评,后续可以继续补充!

    展开全文
  • 使用NaviCat工具连接MySQL和Oracle数据库问题 我们在使用Navicat可视化工具连接数据库时候,会出现很多问题,大多数是数据库连接不上。而这最主要的原因是:IOC没有配置好路径。 看图进行配置:1. 创建数据库连接:...

    使用NaviCat工具连接MySQL和Oracle数据库问题

    我们在使用Navicat可视化工具连接数据库时候,会出现很多问题,大多数是数据库连接不上。而这最主要的原因是:IOC没有配置好路径。

    看图进行配置:

    1. 创建数据库连接:点击左上角的连接

    这里写图片描述

    - 测试的时候如果配置不正确会报很多奇葩的错误:比如

    引用块内容
    - 这时候打开工栏的:工具–>选项…–>IOC

    引用块内容

    重新启动Navicat工具就行了
    也可以参看Navicat的官方文档:http://wiki.navicat.com/wiki/index.php/Instant_client_required

    展开全文
  • 背景 最近项目中有个需求.需要查询更新时间大于...2.通过读取配置文件来判断是MySQL数据库还是Oracle数据库; 3.分别使用不同的sql语句拼接 SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM...

    背景

    最近项目中有个需求.需要查询更新时间大于发布时间的对象;同时还要适配MySQL和Oracle两种数据库;
    

    实现

    思路
    1.对传进来的时间参数进行格式化;
    2.通过读取配置文件来判断是MySQL数据库还是Oracle数据库;
    3.分别使用不同的sql语句拼接
    
     SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
            String dateString = formatter.format(lastupdate);
            String hql = "";
    
            List<Object> values = new ArrayList<>();
    
            try{
                if (Constant.MYSQL.equals(sopConfigReader.getDatabase())) {
                    hql = "from Epgposition t where t.type != '12' and t.epgpage.epgpageid = " + pageid;
                    hql += " and t.lastupdatedate > str_to_date(?,'%Y/%m/%d %H:%i:%s')";
                    hql += " and t.status != '0' and t.status != '2' ";
                }else {
                    hql = "from Epgposition t where t.type != '12' and t.epgpage.epgpageid = " + pageid;
                    hql += " and t.lastupdatedate > to_date(to_char(?),'yyyy/mm/dd hh24:mi:ss')";
                    hql += " and t.status != '0' and t.status != '2' ";
                }
                values.add(dateString);
            }catch(Exception e){
                log.error(e.getMessage());
            }

    区别

    1.mysql
    
    hql += " and t.lastupdatedate > str_to_date(?,'%Y-%m-%d %H:%i:%s')";
    2.oracle
    
    hql += " and t.lastupdatedate > to_date(to_char(?),'yyyy/mm/dd hh24:mi:ss')";
    3.主要区别
    对日期的处理上两者有所不同
    mysql采用str_to_date(?,时间格式)
    oracle采用to_date(to_char(?),时间格式)
    
    展开全文
  • oracle数据库一般用于偏大型项目,具有良好的兼容性、可移植性、可连接性高生产率,oracle是不开源的,一般稍大型公司都有自己优化过的oracle。 二.连接方面(jdbc连接方法) oracle: driverClassName=oracle....
  • Mybatis拦截器同时兼容mysql和oracle

    千次阅读 2019-09-29 10:40:37
    近期,项目要求用的mybatis-plus框架需要同时兼容mysql和oracle,mysql和oracle数据库还是存在很大的差异的,如果是内置函数比如ifnullnvl等的差异,只能采用在xml里用databaseId区分两个代码 但是如果要使用...
  • 开发环境:SpringBoot+SSM,同样适合SpringBoot,具备一定Maven项目基础初学者,详细说明地址http://blog.csdn.net/fjekin/article/details/75541573
  • Class.forName("oracle.jdbc.driver.OracleDriver"); // 拼接数据库url StringBuffer s = new StringBuffer("jdbc:oracle:thin:@"); s.append(dbhost); s.append(":"); s.append(dbport); s....
  • 首先是Oracle数据库:在mybatis相对应的mapper.xml文件里: <!-- WARNING - @mbggenerated This element is automatically generated by MyBatis Generator, do not modify. This element was generated on Th
  • 1.MySQL数据库 使用MyBatis往MySQL数据库中插入一条记录后,成功则返回1,即成功的条数。如果要返回该条记录的自增主键值,在mapper中指定keyProperty属性,例如: (1) <insert id="insert" useGeneratedKeys=...
  • 1.Like模糊查询有字符串拼接 所有用 str1||str2 拼接的字符串都要改成CONCAT(str1,str2) '%'||#{zbmc}||'%'改成CONCAT('%',#{zbmc},'%') ...Oracle中concat与||区别(以及与mysql中concat函数区别) 2. 分页查...
  • Jsp 连接 mySQLOracle 数据库备忘(Windows平台)
  • Golang连接SQLite、MySQLOracle数据库

    千次阅读 2017-02-10 13:50:03
    本文目录 1.Go连接SQLite 1_1.SQLite推荐驱动 1_2.SQLite连接示例代码 2.Go连接MySQL 2_1.MySQL推荐驱动 ...说明:go语言连接数据库不像Java那么方便,本文分别介绍了连接三种典型的数据库的驱动以及连接方
  • 兼容Oracle和MySQL数据库的几点看法

    千次阅读 2005-06-01 11:34:39
    前段时间在忙着将公司的一个系统由MySQL4数据库改为兼容Oracle的版本 修改过程中想到许多可以提高效率的办法,只是没有被公司领导采纳 只能留在这里给下次开发的时候注意这个问题了。 1、选择哪个数据库作为...
  • oracle和mysql数据库兼容总结

    千次阅读 2019-06-25 19:53:12
    sql最好不要用函数 oracle的表别名不能用as,mysql都可以 oracle只能用单引号,mysql都可以 oracle在mapper中不能写分号 oracle的concat只能连接两个字符,mysql...oracle数字字符串不能直接比较,需要转换,m...
  • 支持oracle和mysql 通过前端页面一键下载代码 操作方便 启动即可用 所有项目兼容 使用说明 配置主库,从库 启动项目访问 localhost 配置代码生成策略 配置生成的包名,是否去掉表前缀 代码下载 ...
  • 一、问题背景描述开发的系统默认MySQL数据库,现在需要适合Oracle数据库,初始化数据库SQL代码中包含MySQL的执行SQL需要重新定义。二、目前遇见的问题(18.6.19)1、Oracle的表名列名长度只支持30个字符以内。2...
  • 一、需求:在oracle数据库上有一个sys_org表,要在mysql数据库上创建一个表sys_org_new作为该表的备份。表sys_org大概10000条记录。 二、Oracle同步到MySQL Oracle数据库使用PLSQL Developer连接 MySQL数据库使用...
  • jeecg可以同时连接Oracle数据库和mysql数据库吗?怎么连?
  • Navicat连接oracle数据库数据库需要设置oci.dll。 1、设置oci.dll,下载instantclient,解压; 2、设置oci后,从起Navicat,再打开,新建连接; 点击连接测试,要保证连接的上数据库; ....
  • Jsp 连接 mySQLOracle 数据库备忘(Windows平台) 选择自 dazern 的 Blog - 送给大家的“六一”礼物
  • 1.直接用官方提供的注解方法是无法达到兼容效果的 2.跟踪源码看看是否有其他方法 3.这里有个genSql,可以看一下这个类 4.创建一个自定义的处理类继承GenSql,实现GenSql package com.wisedu.common.handle; ...
  • SQLServer服务器的狭隘的,保守的存储引擎与MySQL服务器的可扩展,开放的存储引擎绝然不同。虽然你可以使用SQLServer服务器的sybase引擎,但MySQL能够提供更多种的选择,如myisam, heap, innodb, and berkeley ...
  • 一、Oracle数据库存储中文字符 Oracle数据库可以以字节或者字符来存储字符串的,一般来说默认是存储字节,你可以查看数据库NLS_LENGTH_SEMANTICS的值。 可以看到Oracle数据库,默认以字节形式存储字符串。 当以...
  • 1 mybatis+oracle &lt;!-- https://mvnrepository.com/artifact/com.oracle/ojdbc6 --&gt; &lt;dependency&gt; &lt;groupId&gt;com.oracle&lt;/groupId&gt; &lt;...
  • 1.使用工具:oracle sqldeveloper 下载地址:https://pan.baidu.com/s/1jIiXumE  密码:1vkc 特别说明:可能会有版本...(1) 新建一个作为备份的mysql数据库 (2) 选中要备份的mysql数据库执行备份操作
  • mysql的HQL比较时间时可以直接使用yyyy-MM-dd HH:mm:ss的格式,但Oracle还需要to_char函数转化,这又需要判断数据库的类型,发现一种解决办法:String hql = "from RecordBean where usingTime>:date"; Query query...
  • 数据库----将Oracle数据库转换成Mysql数据库

    千次阅读 多人点赞 2019-08-14 11:33:16
    有时候由于项目的需求,我们需要将Oracle数据库来转换成mysql,但是当我们数据库中的表数据太多的时候, 手动的转换会耗费大量的时间而且还容易出错,接下来我就来说一下我实现的方式。 所需工具 navicat ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,271
精华内容 14,908
关键字:

兼容mysql和oracle的数据库

mysql 订阅