go oracle 连接串,47.笔记go——go连接Oracle

47.笔记go——go连接Oracle

在连接ORACLE数据库之前我们先来看下一个概念OCI。

oci

ORACLE调用接口(Oracle Call Interface简称OCI)提供了一组可对ORACLE数据库进行存取的接口子例程(函数),通过在第三代程序设计语言(如C语言)中进行调用可达到存取ORACLE数据库的目的。

Go-oci下载

放到开发路径下,文件夹go-oci8-master

将go-oci8-master\windows (绝对路径,此处使用相对路径为例)加入到PATH 环境变量。

设置环境变量PKG_CONFIG_PATH为go-oci8-master\windows(绝对路径,此处使用相对路径为例)

下载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

如果报错:

# 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个地方需要修改

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

完毕。

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值