springboot項目適配國產神通數據庫


若依系統改中間件用的是中創,數據庫用的是神通

 

問題就三個吧,一個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>oscar</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>${pom.basedir}/src/main/resources/lib/oscarJDBC.jar</systemPath>
</dependency>

或者

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

數據源配置如下:

# 數據源配置
spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.oscar.Driver
        druid:
            master:
                 url: jdbc:oscar://192.168.xx.xx:2003/OSRDB
                 username: xxxxxx
                 password: xxxxx

或者

# 數據源配置
spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.oscar.Driver    #驅動名
        druid:
            # 主庫數據源
            master:
                url: jdbc:oscar://你的IP:2004/數據庫名?serverTimezone=UTC&useSSL=FALSE        #神通數據庫默認端口為2003
                username: 連接的用戶
                password: 密碼

  

第二個,不支持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

 

 完美

 

轉載:https://blog.csdn.net/u011738139/article/details/118701245

侵刪


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM