ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

若依springboot项目适配国产神通数据库

2021-07-13 15:58:53  阅读:350  来源: 互联网

标签:神通 springboot -- 适配 数据库 若依 str res piv


公司有一个监控平台,用的是若依,但是由于是给政府部门用的,需要部署在信创平台上,所以中间件用的是金蝶,数据库用的是神通,碰到的一些问题在此记录一下。

我遇到的总的问题就三个吧,一个maven中央仓库没有神通连接jar包,需要手动打包,一个神通数据库不支持replace into语法,一个神通数据库不支持find_in_set函数

首先解决第一个,maven仓库没有神通连接jar包。

可以使用maven本地打包,命令如下

mvn install:install-file -DgroupId=com.stdb -DartifactId=stoscarJDBC16 -Dversion=1.0 -Dpackaging=jar -Dfile=D:\神通数据库连接工具\dbstudio\lib\oscarJDBC.jar

-DgroupId与-DartifactId这个可以自己随意填写,在pom文件中引入时修改对应即可,-Dfile为你jar包所在的目录(可以在神通连接工具的目录下找到),打包成功后在pom文件中引入即可,引入方法如下,之后就可以正常连接了

		<dependency>
		     <groupId>com.stdb</groupId>
		     <artifactId>stoscarJDBC16</artifactId>
		     <version>1.0</version>
		</dependency>

第二个,不支持replace into,这个找了挺久,包括问了神通那边的人,确定神通数据库是不支持这个,所以只能改SQL,把一条拆分为两条

此语法逻辑就是存在则更新/不存在就新增

第三个,不支持find_in_set,这个函数具体作用此处就不写了,百度上大把,也是确定神通数据库不支持的,解决方法如下:

在神通数据库的函数新增名为find_in_set的函数,具体代码如下

CREATE OR REPLACE FUNCTION MONITOR_DEV.FIND_IN_SET(PIV_STR1 IN CHARACTER VARYING(8000),PIV_STR2 IN CHARACTER VARYING(8000),P_SEP IN CHARACTER VARYING(8000) DEFAULT ',') RETURNS NUMERIC(1000,38) AS      

  l_idx    number:=0; -- 用于计算piv_str2中分隔符的位置  

  str      varchar2(500);  -- 根据分隔符截取的子字符串  

  piv_str  varchar2(500) := piv_str2; -- 将piv_str2赋值给piv_str  

  res      number:=0; -- 返回结果  

  loopIndex number:=0;

BEGIN  

-- 如果piv_str中没有分割符,  直接判断piv_str1和piv_str是否相等,  相等 res=1  

IF instr(piv_str, p_sep, 1) = 0 THEN  

   IF piv_str = piv_str1 THEN   

      res:= 1;  

   END IF;  

ELSE  

-- 循环按分隔符截取piv_str  

LOOP  

    l_idx := instr(piv_str,p_sep);  

     loopIndex:=loopIndex+1;

-- 当piv_str中还有分隔符时  

      IF l_idx > 0 THEN  



   -- 截取第一个分隔符前的字段str  

         str:= substr(piv_str,1,l_idx-1);  

   -- 判断 str 和piv_str1 是否相等,  相等 res=1 并结束循环判断  

         IF str = piv_str1 THEN   

           res:= loopIndex;  

           EXIT;  

         END IF;  

        piv_str := substr(piv_str,l_idx+length(p_sep));  

      ELSE  

   -- 当截取后的piv_str 中不存在分割符时,  判断piv_str和piv_str1是否相等,  相等 res=1  

        IF piv_str = piv_str1 THEN   

           res:= loopIndex;  

        END IF;  

        -- 无论最后是否相等,  都跳出循环  

        EXIT;  

      END IF;  

END LOOP;  

-- 结束循环  

END IF;  

-- 返回res  

RETURN res;  

END FIND_IN_SET;

然后测试一下

所有数据如图:

在这里插入图片描述

使用此函数查询ancestors字段包含100的内容

select * from sys_dept where find_in_set(100, ancestors) > 0

在这里插入图片描述

使用此函数查询ancestors字段包含200的内容

select * from sys_dept where find_in_set(200, ancestors) > 0

在这里插入图片描述

已达到想要的效果

标签:神通,springboot,--,适配,数据库,若依,str,res,piv
来源: https://blog.csdn.net/u011738139/article/details/118701245

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有