蛤蟆 Oracle,47.蛤蟆笔记go——go连接Oracle
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android发展的外文文献综述,and
- 下一篇: fiddler怎么修改服务器返回数据,基