47.笔记go——go连接Oracle
47.笔记go——go连接Oracle 在连接ORACLE数据库之前我们先来看下一个概念OCI。 ociORACLE调用接口(Oracle Call Interface简称OCI)提供了一组可对ORACLE数据库进行存取的接口子例程(函数),通过在第三代程序设计语言(如C语言)中进行调用可达到存取ORACLE数据库的目的。 Go-oci下载地址:https://github.com/wendal/go-oci8 放到开发路径下,文件夹go-oci8-master 将go-oci8-masterwindows (绝对路径,此处使用相对路径为例)加入到PATH 环境变量。 设置环境变量PKG_CONFIG_PATH为go-oci8-masterwindows(绝对路径,此处使用相对路径为例) 下载OCI地址:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html 最新的版本是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} 历史版本下载: http://www.oracle.com/technetwork/cn/database/features/instant-client/index-092699-zhs.html 修改oci8.go如果报错: # go-oci8-master go-oci8-masteroci8.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-masteroci8.go文件 有4个地方需要修改 1、119行 2、136行 3、263行 4、383行 或者直接替换OCIServer为OCISvcCtx。 代码package main import ( "database/sql" _"go-oci8-master" "log" "os" ) func main() { // 为log添加短文件名,方便查看行数 log.SetFlags(log.Lshortfile| log.LstdFlags) log.Println("OracleDriver example") os.Setenv("NLS_LANG","") // 用户名/密码@实例名跟sqlplus的conn命令类似 db,err := sql.Open("oci8","tpcc2/tpcc2@toaddb") iferr != nil { log.Fatal(err) } rows,err := db.Query("select 3.14,'foo' from dual") iferr != 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") iferr != nil { log.Fatal(err) } forrows.Next() { var name string rows.Scan(&name) log.Printf("Name= %s,len=%d",name,len(name)) } rows.Close() } 执行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 完毕。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |