日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

哪种语言 连接 oracle,Go语言连接Oracle(就我这个最全)

發(fā)布時(shí)間:2024/7/23 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 哪种语言 连接 oracle,Go语言连接Oracle(就我这个最全) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

綜合參考了網(wǎng)上挺多的方案

倒騰了半天終于連接好了

Go都出來這么多年了

還沒有個(gè)Oracle的官方驅(qū)動(dòng)。。。

過程真的很蛋疼。。一度想放棄直接連ODBC

首先交代一下運(yùn)行環(huán)境和工具版本:

WIN10

MINGW64

ORACLE?INSTANCCLIENT_18_3? ?x64

Jetbrins Goland

看完這篇文章,你可以解決如下問題(正經(jīng)的解決):

編譯階段:

1. exec: "gcc": executable file not found in %PATH%

2. exec: "pkg-config": executable file not found in %PATH%

3. cannot use (**_Ctype_struct_OCIServer)(unsafe.Pointer(&conn.svc))

(type **_Ctype_struct_OCIServer) as type **_Ctype_struct_OCISvcCtx

in argument to func literal

運(yùn)行階段:

1. Process finished with exit code -1073741701 (0xC000007B)

2. exit status 3221225595

開始

一、下載ORACLE?INSTANCCLIENT 和對(duì)應(yīng)的SDK

下載地址:https://www.oracle.com/technetwork/topics/winx64soft-089540.html

我選用了18.3 x64的版本,能向下兼容,不用擔(dān)心

注意basic版本和sdk都需要下載下來,一共是兩個(gè)文件

下載之后先解壓basic壓縮包,然后將sdk解壓到basic目錄下:

添加如下環(huán)境變量到系統(tǒng)PATH變量:(按自己的情況添加)

二、下載安裝MINGW64

主要是解決WIN中沒有GCC的問題

如果不安裝后期會(huì)出現(xiàn)問題:(exec: "gcc":?executable file not found?in %PATH%)

因?yàn)橹跋螺d的ORACLE?INSTANCCLIENT是64位的所以我們也需要下載MINGW64才能編譯

下載地址:https://sourceforge.net/projects/mingw-w64/files/

注意,第一個(gè)是在線安裝程序,較慢,建議直接下載7z壓縮包。解壓即可

解壓之后,添加如下環(huán)境變量到PATH:(按自己的情況添加)

三、獲取GO-OCI8驅(qū)動(dòng)

執(zhí)行命令:go get github.com/wendal/go-oci8

會(huì)報(bào)一個(gè)錯(cuò)誤:pkg-config: exec: "pkg-config": executable file not found in %PATH%

先忽略,后面會(huì)解決

四、修改OCI8.PC

進(jìn)入GOPATH目錄,找到OCI8.PC文件,打開,修改 紅色框的部分(按你自己的情況)

%GoPath%\src\github.com\wendal\go-oci8\windows

然后:

1.復(fù)制此目錄下pkg-config.exe到mingw64下的bin目錄

2.復(fù)制此目錄下oci8.pc到mingw64下的lib/pkg-config目錄(pkg-config目錄需要自己建)

添加如下(PKG_CONFIG_PATH)環(huán)境變量:(按自己情況)

五、最后一步

執(zhí)行命令:go get github.com/wendal/go-oci8

此時(shí)執(zhí)行這個(gè)操作

應(yīng)該已經(jīng)沒有(pkg-config: exec: "pkg-config": executable file not found in %PATH%)這個(gè)錯(cuò)誤了,如果還有,就是上一步你做的不太對(duì)。

但是,還會(huì)有新的錯(cuò)誤出現(xiàn),如下:

不要慌

打開GOPATH目錄下,oci8.go文件

路徑:%GoPath%\src\github.com\wendal\go-oci8

此文件中四處OCIServer為OCISvcCtx

再次!!!!

執(zhí)行命令:go get github.com/wendal/go-oci8

可以了,完事兒。

讓我們上一段代碼,測試一下:

package mainimport ("database/sql"

"fmt"

"log"

"os"_"github.com/wendal/go-oci8")

func query() {

os.Setenv("NLS_LANG", "AMERICAN_AMERICA.AL32UTF8")

log.SetFlags(log.Lshortfile|log.LstdFlags)

db, err := sql.Open("oci8", "j1_bibox/oracle123@10.1.196.200:1521/zjdevdb")if err !=nil {

log.Fatal(err)

}

defer db.Close()

rows, err := db.Query("select * from v$version")if err !=nil {

log.Fatal(err)

}

cols, _ :=rows.Columns()

rawResult := make([][]byte, len(cols))

result := make([]string, len(cols))

dest := make([]interface{}, len(cols))for i :=range rawResult {

dest[i]= &rawResult[i]

}forrows.Next() {

err=rows.Scan(dest...)for i, raw :=range rawResult {if raw ==nil {

result[i]= ""}else{

result[i]= string(raw)

}

}

fmt.Printf("%s\n", result[0])

}

rows.Close()

}

func main() {

query()

}

走你

就是這么刺激,還是錯(cuò)!!!!?????

現(xiàn)在不要慌,冷靜一點(diǎn),分析情況

首先,如果你的代碼在IDE中運(yùn)行,會(huì)報(bào)錯(cuò)如下:

如果你不信這個(gè)邪,在cmd中運(yùn)行,會(huì)報(bào)錯(cuò)如下:

然后你拿著報(bào)錯(cuò)信息,去找度娘,有人會(huì)告訴你,你的instanceclient版本不對(duì),然后你就不停的換版本,換版本,換版本

然后發(fā)現(xiàn)卵用沒有

對(duì),那個(gè)人就是我,=_=???????

現(xiàn)在!!我現(xiàn)在!!告訴你!!

真相只有一個(gè)!!!!!!!!

那就是:以管理員模式運(yùn)行

來到這,無數(shù)次失敗,無數(shù)次嘗試最后獲得成功的激動(dòng),瞬間就把你點(diǎn)燃。

恐怕這就是計(jì)算機(jī)世界吸引我的地方吧。

IDE中也可以這樣解決問題:

最后的最后,讓我們給這段代碼加個(gè)注釋:

最后的最后的最后,如有指教,請(qǐng)留言。

原文出處:https://www.cnblogs.com/jiangyuqin/p/10135963.html

總結(jié)

以上是生活随笔為你收集整理的哪种语言 连接 oracle,Go语言连接Oracle(就我这个最全)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。