golang適配國產數據庫

隨著國產化的推進,越來越多的企業選擇國產數據庫替代mysql或者Oracle。
本篇主要介紹golang如何適配國產數據庫
主流的國產數據庫有達夢,金倉,神通,優炫,南大通用數據庫等

前提環境

unixODBC安裝

yum -y install unixODBC unixODBC-devel

配置 gbase8s-odbc-driver

wget https://gbasedbt.com/dl/odbc/GBase8s_3.0.0_1-Linux64-ODBC-Driver.tar.gz --no-check-certificate
tar -zxf GBase8s_3.0.0_1-Linux64-ODBC-Driver.tar.gz

配置 sqlhosts

gbase01  onsoctcp        ip  9088    g=db_group
cm_update       group   -       -       i=2,c=0
w1      onsoctcp        ip  18888   g=cm_update
cm_read         group   -       -       i=3,c=0
r1      onsoctcp        ip  19999   g=cm_read

配置環境變量 (使用 root) vim /etc/profile

export GBASEDBTDIR=/home/gbase8s-odbc-driver
export GBASEDBTSERVER=gbase01
export PATH=$GBASEDBTDIR/bin:$PATH
export GBASEDBTSQLHOSTS=$GBASEDBTDIR/etc/sqlhosts
export LD_LIBRARY_PATH=$GBASEDBTDIR/lib:$GBASEDBTDIR/lib/esql:$GBASEDBTDIR/lib/cli:$LD_LIBRARY_PATH
export ODBCINI=/home/gbase8s-odbc-driver/odbc.ini

配置 驅動 (使用 root) vim /etc/odbcinst.ini

[com.gbasedbt.jdbc.Driver]
Driver=/home/gbase8s-odbc-driver/lib/cli/iclit09b.so
Setup=/home/gbase8s-odbc-driver/lib/cli/iclit09b.so
APILevel=1
ConnectFunctions=YYY
DriverODBCVer=03.51
FileUsage=0
SQLLevel=1
smProcessPerConnect=Y

配置 odbc.ini vim /home/linkdood/gbase8s-odbc-driver/odbc.ini

[ODBC]
UNICODE=UCS-2

測試驅動連接

isql -v -k "DRIVER={com.gbasedbt.jdbc.Driver};DB=testdataserver;UID=gbasedbt;pwd=GBase123;Server=gbase01;CLIENT_LOCALE=zh_CN.57372;DB_LOCALE=zh_CN.57372;"

golang通過odbc連接國產數據庫

func init() {
file, err := os.Open(“config.xml”)
if err != nil {
Log.Info(“error:%v”, err)
return
}
defer file.Close()
config, err := ioutil.ReadAll(file)
if err != nil {
Log.Info(“error:%v”, err)
return
}
configValue := SConfig{}
err = xml.Unmarshal(config, &configValue)
if err != nil {
Log.Error(“error:%v”, err)
return
}
strKey := configValue.Server.Aid + configValue.Server.Elogo
var strPassword string
var strUsername string
strPassword = configValue.DataBase.Password
strUsername = configValue.DataBase.User
fmt.Printf(“strPassword:%v\n”, strPassword)
fmt.Printf(“strUsername:%v\n”, strUsername)
ServerPort = configValue.Server.Port
var dbDSN = “” //dataSourceName
var driverName = “” //驅動名
var DbServer = configValue.DataBase.Host + “:” + configValue.DataBase.Port
if configValue.DataBase.DbType == “mysql” {
fmt.Printf(“mysql database\n”)
driverName = “mysql”
dbDSN = fmt.Sprintf(“%s:%s@tcp(%s:%s)/%s?charset=%s”, strUsername, strPassword, configValue.DataBase.Host, configValue.DataBase.Port, configValue.DataBase.DBName, configValue.DataBase.Charset)
} else if configValue.DataBase.DbType == “shentong” {
fmt.Printf(“shentongsql database\n”)
/driverName = “odbc”
dbDSN = fmt.Sprintf(“driver={%s};server=%s;port=%s;database=%s;uid=%s;pwd=%s;charset=%s”, configValue.DataBase.Driver, configValue.DataBase.Host, configValue.DataBase.Port, configValue.DataBase.DBName, strUsername, strPassword, configValue.DataBase.Charset)
/
driverName = “aci”
dbDSN = fmt.Sprintf(“%s/%s@%s:%s/%s”, strUsername, strPassword, configValue.DataBase.Host, configValue.DataBase.Port, configValue.DataBase.DBName)
} else if configValue.DataBase.DbType == “dameng” {
strPassword = CheckAndModifyString(strPassword)
fmt.Printf(“dmsql database\n”)
driverName = “dm”
//dbDSN = fmt.Sprintf(“driver={%s};server=%s;database=%s;uid=%s;pwd=%s;charset=%s”, configValue.DataBase.Driver, DbServer, configValue.DataBase.DBName, strUsername, strPassword, configValue.DataBase.Charset)
dbDSN = fmt.Sprintf(“%s://%s:%s@%s?schema=%s”, driverName, strUsername, strPassword, DbServer, configValue.DataBase.DBName)
} else if configValue.DataBase.DbType == “kingbase” {
fmt.Printf(“kingbase database\n”)
driverName = “odbc”
dbDSN = fmt.Sprintf(“driver={%s};server=%s;port=%s;database=%s;uid=%s;pwd=%s;charset=%s”, configValue.DataBase.Driver, configValue.DataBase.Host, configValue.DataBase.Port, configValue.DataBase.DBName, strUsername, strPassword, configValue.DataBase.Charset)
} else if configValue.DataBase.DbType == “GBase8s” {
fmt.Printf(“GBase8s database\n”)
driverName = “odbc”
dbDSN = fmt.Sprintf(“driver={%s};server=%s;port=%s;database=%s;uid=%s;pwd=%s;charset=%s”, configValue.DataBase.Driver, configValue.DataBase.Host, configValue.DataBase.Port, configValue.DataBase.DBName, strUsername, strPassword, configValue.DataBase.Charset)
}
dbType = configValue.DataBase.DbType
// 打開連接失敗
MysqlDb, MysqlDbErr = sql.Open(driverName, dbDSN)
//defer MysqlDb.Close();
if MysqlDbErr != nil {
panic("數據源配置不正確: " + MysqlDbErr.Error())
}
// 最大連接數
MysqlDb.SetMaxOpenConns(100)
// 閑置連接數
MysqlDb.SetMaxIdleConns(20)
// 最大連接周期
MysqlDb.SetConnMaxLifetime(100 * time.Second)
if MysqlDbErr = MysqlDb.Ping(); nil != MysqlDbErr {
panic("數據庫鏈接失敗: " + MysqlDbErr.Error())
}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12323.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12323.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12323.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【深度學習實戰(36)】模型轉換之onnx模型轉地平線J3 二進制bin模型

一、PTQ量化流程 (1) 核查onnx模型 (2)準備和生成模型校準數據集 (3)PTQ量化 (4)量化模型推理 二、具體流程 (1)使用01_check_onnx.sh腳本,對o…

Spring6 源碼分析-ioc

&#xff08;1&#xff09;IDEA開發工具&#xff1a;2022.1.2 &#xff08;2&#xff09;JDK&#xff1a;Java17&#xff08;Spring6要求JDK最低版本是Java17&#xff09; &#xff08;3&#xff09;Spring&#xff1a;6.0.2 <dependencies><!--spring context依賴…

【教程】Linux/Jetson 安裝X11VNC同步屏幕內容

轉載請注明出處&#xff1a;小鋒學長生活大爆炸[xfxuezhagn.cn] 如果本文幫助到了你&#xff0c;請不吝給個[點贊、收藏、關注]哦~ 目錄 背景說明 實際效果 安裝步驟 安裝 x11vnc 配置 x11vnc 配置 x11vnc 作為系統服務 使用 VNC 客戶端連接 背景說明 通常vnc-server是單…

分享一個非常好用的安裝包下載網站

當我們需要下載linux下的某些包,以便在自己的環境下進行編譯自己的安裝包的時候,可能需要用到一些各種版本的依賴包,從網上 百度會很麻煩。 這里分享一個很好用的安裝包下載網站,記得點贊收藏 網站: Red Hat Enterprise Linux Repositories - pkgs.org 找到對應系統,然…

深入理解K8S【安全認證機制kubectlconfig】

深入理解K8S【安全認證機制】 1 核心概念 1.1 安全體系 對于大型系統來說&#xff0c;對業務的權限、網絡的安全認證是必不可少的。 對于linux系統來說&#xff0c;用戶和組、文件權限、SELinux、防火墻、pam、sudo等&#xff0c;究其核心的目的都是為了保證系統是安全的。 …

golang 中在for循環體內使用select case <-time.After定時器問題

在go語言的代碼中&#xff0c;我們經常會看到在在for循環體內使用select case <-time.After 的類似語句&#xff0c; 其實這個地方不管你是用 time.After(2 * time.Second) 還是 time.NewTicker(2 * time.Second) 的方式&#xff0c;如果放到for循環體內select case 則這個c…

【element-plus】自動導入 + typescript 提示 + 自定義主題色

1、自動導入 2、引用加載組件類型提示 第一步&#xff1a;安裝自動導入功能所需的插件 npm install -D unplugin-vue-components unplugin-auto-import 第二步&#xff1a; vite版&#xff1a; // vite.config.ts import { defineConfig } from vite import AutoImport fr…

四天學會JS高階(學好vue的關鍵)——作用域解構箭頭函數(理論+實戰)(第一天)

一、作用域 提到作用域&#xff08;作用域又分為局部作用域和全局作用域&#xff09;&#xff0c;就要想到變量。因為作用域規定了變量能夠被訪問的范圍&#xff08;也就是作用域是為變量而服務的&#xff09;&#xff0c;為了避免全局變量污染這一情況&#xff0c;所以需要使…

如何排查域名網站無法訪問了頁面報500錯誤

本周有一個客戶&#xff0c;購買Hostease的虛擬主機&#xff0c;詢問我們的在線客服&#xff0c;域名網站無法訪問了報500錯誤頁面&#xff0c;怎么辦&#xff1f;我們為用戶提供相關教程&#xff0c;用戶很快解決了遇到的問題。在此&#xff0c;我們分享這個操作教程&#xff…

bugfix:遇見“隱形字符”:ⅰ與i的編碼迷局

前言 在軟件開發的世界里&#xff0c;遇到各種奇奇怪怪的bug是在所難免的。今天&#xff0c;我就遭遇了一個看似簡單實則棘手的問題——用戶反饋賬號無法登錄&#xff0c;系統一直提示“賬號不存在”。一番抽絲剝繭后&#xff0c;我發現問題竟然出在一個不起眼的字符上&#x…

Go微服務: Gin框架搭建網關, 接入熔斷器,鏈路追蹤以及服務端接入限流和鏈路追蹤

概述 本文使用最簡單和快速的方式基于Gin框架搭建一個微服務的網關調用微服務的場景網關作為客戶端基于RPC調用某一服務端的服務并接入熔斷和限流以及鏈路追蹤具體場景&#xff1a;通過網關API查詢購物車里的數據在最后&#xff0c;會貼上網關和購物車服務的代碼倉庫 服務端搭…

避雷:搭建AI知識庫注意事項

AI知識庫作為信息存儲和進行智能處理的核心部分&#xff0c;受到越來越多企業的重視。為了更好地發展&#xff0c;企業也紛紛開始搭建AI知識庫。然而&#xff0c;在搭建AI知識庫的過程中&#xff0c;也有很多雷區容易踩到&#xff0c;導致項目延遲、效果不佳甚至失敗。所以&…

《控制系統實驗與綜合設計》計控第三次(含程序和題目)

實驗七 采樣控制系統的分析 一、實驗完成任務 1、熟悉用 LF398 組成的采樣控制系統&#xff1b; 2、通過本實驗理解采樣定理和零階保持器的原理及其實現方法&#xff1b; 3、觀察系統在階躍作用下的穩態誤差。 4.、研究開環增益 K 和采樣周期 T 的變化對系統動態性能的影響…

Linux基礎之進程-進程狀態

目錄 一、進程狀態 1.1 什么是進程狀態 1.2 運行狀態 1.2 阻塞狀態 1.3 掛起狀態 二、Linux操作系統上具體的進程狀態 2.1 狀態 2.2 R 和 S 狀態的查看 2.3 后臺進程和前臺進程 2.4 休眠狀態和深度休眠狀態 一、進程狀態 1.1 什么是進程狀態 首先我們知道我們的操作系…

分布式光伏監控系統功能模塊詳解

目前&#xff0c;分布式光伏發電系統的總容量比較小&#xff0c;并且光伏電站的功率受外界環境影響容易出現大起大落的現象。這使電壓調整變得很困難。光伏電站運行維護人員不足&#xff0c;長時間不保養維護會影響光伏電站的發電效率。針對上述問題&#xff0c;鷓鴣云基于無線…

天銳綠盾|設計院圖紙透明加密軟件、制造業文件資料防止外泄

#圖紙加密軟件# 天銳綠盾是一家專注于數據安全解決方案的提供商&#xff0c;其產品主要為企業級用戶設計&#xff0c;旨在保護敏感信息和知識產權免遭未經授權的訪問或泄露。"天銳綠盾"的圖紙透明加密軟件和機械制造業文件資料防止外泄系統&#xff0c;是專為設計院…

JS中的宏任務和微任務

JavaScript 引擎是建立在一個事件循環系統之上的&#xff0c;它實時監控事件隊列&#xff0c;如果有事件就執行&#xff0c;如果沒有事件就等待。事件系統是一個典型的生產消費模式&#xff0c;生產者發出事件&#xff0c;接收者監聽事件&#xff0c;在UI 開發中是常見的一個設…

Modbus TCP轉CAN網關在不同行業中的應用以及其使用上的優勢

倍訊科技Modbus TCP轉CAN網關通常被用于工業自動化領域&#xff0c;特別是在需要連接現有Modbus TCP網絡和CAN總線設備的場景中。以下是該網關在不同行業中的應用以及其使用上的優勢&#xff1a; 1. 制造業&#xff1a; - 在制造業中&#xff0c;各種類型的設備和機器通常使用不…

Java項目實現報文數據校驗注解方式(必輸項、值大小)

普通項目 導入校驗依賴 <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>4.1.0.Final</version></dependency><dependency><groupId>javax.validation</…

Docker安裝Redis,并在 Visual Studio Code 中使用它

Docker安裝Redis 查找Redis docker search Redis完整結果 PS C:\Users\cheng> docker search Redis NAME DESCRIPTION STARS OFFICIAL redis Redis is an open …