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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

蛤蟆 Oracle,47.蛤蟆笔记go——go连接Oracle

發(fā)布時(shí)間:2024/7/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蛤蟆 Oracle,47.蛤蟆笔记go——go连接Oracle 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

47.蛤蟆筆記go——go連接Oracle

在連接ORACLE數(shù)據(jù)庫之前我們先來看下一個(gè)概念OCI。

oci

ORACLE調(diào)用接口(Oracle Call Interface簡稱OCI)提供了一組可對(duì)ORACLE數(shù)據(jù)庫進(jìn)行存取的接口子例程(函數(shù)),通過在第三代程序設(shè)計(jì)語言(如C語言)中進(jìn)行調(diào)用可達(dá)到存取ORACLE數(shù)據(jù)庫的目的。

Go-oci下載

放到開發(fā)路徑下,文件夾go-oci8-master

將go-oci8-master\windows (絕對(duì)路徑,此處使用相對(duì)路徑為例)加入到PATH 環(huán)境變量。

設(shè)置環(huán)境變量PKG_CONFIG_PATH為go-oci8-master\windows(絕對(duì)路徑,此處使用相對(duì)路徑為例)

下載OCI

最新的版本是12.1.0.1.0

安裝到:C:/instantclient_12_1

修改oci8.pc文件中如下:

prefix=C:/instantclient_12_1

exec_prefix=C:/instantclient_12_1

libdir=${exec_prefix}

includedir=${prefix}/sdk/include/

Name: OCI

Description: Oracle database engine

Version: 12.1

Libs: -L${libdir} -loci

Libs.private:

Cflags: -I${includedir}

歷史版本下載:

修改oci8.go

如果報(bào)錯(cuò):

# go-oci8-master

go-oci8-master\oci8.go:116: cannot convert(**C.struct_OCIServer)(unsafe.Pointer(&conn.svc)) (type**C.struct_OCIServer) to type **C.struct_OCISvcCtx

exit status 2

則需要修改\go-oci8-master\oci8.go文件

有4個(gè)地方需要修改

1、119行

2、136行

3、263行

4、383行

或者直接替換OCIServer為OCISvcCtx。

package main

import (

"database/sql"

_"go-oci8-master"

"log"

"os"

)

func main() {

// 為log,方便查看行數(shù)

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

log.Println("OracleDriver example")

os.Setenv("NLS_LANG","")

// /密碼@實(shí)例名跟sqlplus的conn命令類似

db,err:= sql.Open("oci8","tpcc2/tpcc2@toaddb")

if err!= nil {

log.Fatal(err)

}

rows,err := db.Query("select 3.14,'foo' from dual")

if err!= nil {

log.Fatal(err)

}

deferdb.Close()

forrows.Next() {

varf1 float64

varf2 string

rows.Scan(&f1,&f2)

log.Println(f1,f2) // 3.14 foo

}

rows.Close()

// 先刪表,再建表

db.Exec("droptable sdata")

db.Exec("createtable sdata(name varchar2(256))")

db.Exec("insertinto sdata values('')")

db.Exec("insertinto sdata values('1234567890ABCabc!@#$%^&*()_+')")

rows,err = db.Query("select * from sdata")

if err!= nil {

log.Fatal(err)

}

forrows.Next() {

var name string

rows.Scan(&name)

log.Printf("Name= %s,len=%d",name,len(name))

}

rows.Close()

}

執(zhí)行

2016/07/1011:09:51 hello.go:14: Oracle Driver example

2016/07/1011:09:51 hello.go:33: 3.14 foo

2016/07/1011:09:52 hello.go:52: Name = 中文,len=6

2016/07/1011:09:52 hello.go:52: Name = 1234567890ABCabc!@#$%^&*()_+,len=28

完畢。

總結(jié)

如果覺得編程之家網(wǎng)站內(nèi)容還不錯(cuò),歡迎將編程之家網(wǎng)站推薦給程序員好友。

本圖文內(nèi)容來源于網(wǎng)友網(wǎng)絡(luò)收集整理提供,作為學(xué)習(xí)參考使用,版權(quán)屬于原作者。

總結(jié)

以上是生活随笔為你收集整理的蛤蟆 Oracle,47.蛤蟆笔记go——go连接Oracle的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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