Golang连接Oracle的库有很多,比较常见的如下:

不过,oralce 只提供了 oci8 的接口,必须通过它来调用,所以下面方案都逃不过相关设置。

1、go-db-oracle

地址: https://code.google.com/p/go-db-oracle/

官方介绍:

Oracle Driver using cgo to call OCI libraries from Oracle Instant Client 11. Developed with Linux Status initial: connects, authenticates, basic SELECTs, missing error control, not deallocating memory

关键点:

  • 使用CGO开发的;
  • 基于Oracle 11
  • 基于Linux环境下

2、go-oci8

地址:https://github.com/wendal/go-oci8

它是 https://github.com/mattn/go-oci8 的分支, 增加了windows下中文的安装说明及相关文件

安装步骤,注意它的安装方式跟之前方式不一样了:之前是 http://wendal.net/459.html 这里提供的步骤, 跟github上安装步骤不一样。以github的为准。

 

2.1、安装最新版的git,并设置可以从命令行直接调用git命令。

安装方式请看下面这篇文章:

https://github.com/wohugb/git-reference/blob/master/Getting-Started/Installing-Git.rst

比如我安装的是 Git-1.8.4-preview20130916 这个 版本。

 

2.2、下载OCI最新版,

存放于C:\instantclient_12_1

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

OCI是集成在 Oracle Database Instant Client 的Basic 版本中的。下载地址如下:
http://www.oracle.com/technetwork/database/features/instant-client/index.html

注意,后面你装的MinGW是64位版本,就需要OCI也是64位版本, 如果MinGW是32位版本,则需要OCI是32位版本。

 

2.3、下载OCI SDK最新版,

存放于C:\instantclient_11_2\sdk

下载地址仍然是上面地址。

注意,后面你装的MinGW是64位版本,就需要OCI也是64位版本, 如果MinGW是32位版本,则需要OCI是32位版本。

 

2.4、下载MinGW最新版,

下载地址:http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/  下载后安装在C:\mingw。

MinGW全称Minimalist GNU For Windows,是个精简的Windows平台C/C++、ADA及Fortran编译器,相比Cygwin而言,体积要小很多,使用较为方便。MinGW提供了一套完整的开源编译工具集,以适合Windows平台应用开发,且不依赖任何第三方C运行时库。(http://www.mingw.org/wiki/Getting_Started

参考:http://www.cnblogs.com/ghj1976/p/3175591.html

 

如果你安装的是MinGW 64 位版本,请参看下面这篇文章:

http://www.cnblogs.com/ghj1976/p/3540257.html 

 

如果 MinGW是64位, oci 是32 会,编译时会报错:

ld.exe: skipping incompatible C:/instantclient_12_1/oci.dll when searching for -loci 

2.5、下载pkg-config.exe和oci8.pc

(已经存放在windows文件夹下,)
将pkg-config.exe复制到C:\mingw\bin\下
将oci8.pc复制到C:\mingw\lib\pkg-config\下

注意,oci8.pc 需要根据你下载的 oci进行修改。下面是我根据我下载的oci版本做的修改。

# Package Information for pkg-config

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}

2.6、修改系统环境变量,

添加
PATH=原有PATH;C:\instantclient_12_1;C:\MinGW\bin;
PKG_CONFIG_PATH=C:\MinGW\lib\pkg-config

2.7、下载相关源码。

执行 go get github.com/wendal/go-oci8

 

 

2.8、测试一下:

    cd %GOPATH%/src/github.com/wendal/go-oci8/example
    go run oracle.go 
   

2.9、配置Oracle连接字符串

在一个目录下新建一个 tnsnames.ora 文件,用于配置连接字符串别名。

这个文件内容类似如下,参考 http://hi.baidu.com/sunxden/item/f5e1423a9bfc298df4e4ad4b

ORA10 =
(DESCRIPTION =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.1)(PORT = 1521))
   )
   (CONNECT_DATA =
     (SERVICE_NAME = ora10)
   )
)

比如我是把这个文件放在 C:\instantclient_12_1\tns 目录下了。

修改全局配置文件,增加一个 TNS_ADMIN 设置 ,指向这个目录。

set TNS_ADMIN=C:\instantclient_12_1\tns

这杨我们连接字符串就可以写成  用户名/密码@实例名

 

 
这个包网上看到下面一些问题:

https://groups.google.com/forum/#!topic/golang-china/4OmCsvqRcKA

 

3、goci

https://github.com/hlife/goci  它是修改自 https://github.com/egravert/goci

作者提供的编译注意事项:
在相关程序中我加了 cgo 编译时需加的头文件和连接库
#cgo CFLAGS: -I/home/oracle/app/oracle/product/11.2.0/client_1/rdbms/public
#cgo LDFLAGS: -lclntsh -L/home/oracle/app/oracle/product/11.2.0/client_1/lib
您在使用时,请将 /home/oracle/app/oracle/product/11.2.0/client_1 修改为你的
系统中 $ORACLE_HOME 的字串值

如果你使用简易的安装包,请在

http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
下载:
oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm
并安装和设置oracle环境变量。
同时需设置
export TNS_ADMIN=/home/oracle/app/oracle/product/11.2.0/client_1/network/admin
### ORACLE_HOME 以您系统实际情况进行修改。

 

参考资料:

 

 

参看资料:

golang 和 oracle 数据库编程类库介绍
http://bbs.mygolang.com/thread-202-1-1.html

golang 在 redhat linux 下如何连接 oracle?
http://www.oschina.net/question/110132_91394

微博上一些相关讨论
http://s.weibo.com/weibo/golang%2520oracle&b=1&page=1

Golang连接Oracle数据库的更多相关文章

  1. java连接Oracle数据库

    Oracle数据库先创建一个表和添加一些数据 1.先在Oracle数据库中创建一个student表: create table student ( id ) not null primary key, ...

  2. 记录排查解决Hubble.Net连接Oracle数据库建立镜像库数据丢失的问题

    起因 前几天在弄Hubble连接Oracle数据库,然后在mongodb中建立一个镜像数据库; 发现一个问题,原本数据是11W,但是镜像库中只有6w多条; 刚开始以为是没运行好,又rebuild了一下 ...

  3. NodeJs连接Oracle数据库

    nodejs连接oracle数据库,各个平台的官方详情文档:https://github.com/oracle/node-oracledb/blob/master/INSTALL.md 我的nodej ...

  4. jdbc连接oracle数据库

    /*** 通过改变配置文件来连接不同数据库*/package com.xykj.jdbc; import static org.junit.Assert.*; import java.io.Input ...

  5. 用VS连接oracle数据库时ORA-12504错误

    在用VS2008连接oracle数据库时,可能会出现: ORA-12504: TNS: 监听程序在 CONNECT_DATA 中未获得 SERVICE_NAME 只需在web.config文件Data ...

  6. ASP.NET连接Oracle数据库的步骤详解(转)

    ASP.NET连接Oracle数据库的步骤详解   本文我们主要介绍了ASP.NET连接Oracle数据库的步骤及每个步骤需要进行的设置,希望能够对您有所帮助.   在用ASP.NET开发应用程序时, ...

  7. 64 位win 7或windows 8下的visual studio不能连接Oracle数据库调试网站的问题

    在64 位win 7或windows 8系统下,visual studio直接F5运行网站调试,你会发现不能连接Oracle数据库,会报一个“ORA-06413: Connection not ope ...

  8. [原创]安装Oracle 11gR2,以及如何在win8下使用plsql develper连接Oracle数据库 ,在这里和大家分享下

    一,关于win8下安装Oracle 11gR2 1.我下载的是Oracle_11gR2_win64.其中有两个包: 注意:在解压了之后将:win64_11gR2_database_2of2\datab ...

  9. 用Navicat连接Oracle数据库时报错ORA-28547:connection to server failed,probable Oracle Net admin error

    用Navicat连接Oracle数据库时出现如下错误 上网一查原来是oci.dll版本不对.因为Navicat是通过Oracle客户端连接Oracle服务器的,Oracle的客户端分为两种,一种是标准 ...

随机推荐

  1. inno setup判断是Windows系统版本(其实还是Delphi代码,还能检查域控制器和家庭版)

    1.设置Windows最低版本要求 [Setup]: MinVersion 格式: a.bb,c.dd,这里 a.bb 是 Windows 版本,c.dd 是 Windows NT 版本. 默认值: ...

  2. iOS iphone屏幕分析(岂止而大)

    在写本文前,我必须介绍几点内容:第一点:屏幕上面显示的内容多少和屏幕的尺寸大小无关第二点:屏幕上面显示的内容多少和分辨率完全无关第三点:屏幕上面显示的内容多少和屏幕尺寸.屏幕分辨率.PPI等都是无关的 ...

  3. JBOSS内存溢出处理

    JBOSS内存溢出处理 前几天公司一个项目的服务器坏了,就换了一个备份服务器顶替一下,但是没有跑一会就宕机了,一直报java.lang.OutOfMemoryError....一看到这里,就知道是内存 ...

  4. c# 计算1-100之间的所有质数(素数)的和

    求1-100之间的所有质数(素数)的和: 所以先必须知道什么是质数? 一个数是不是素数   “素数”是指除了能被1和自身整除外,不能被任何其它整数整除的自然数. 然后知道有哪些是质数: 记忆的方法: ...

  5. 使用Windows Azure PowerShell远程管理Windows Azure虚拟机

    对于Windows Azure,如果你还在使用windowsazure.com门户来管理虚拟机,那就显得不怎么高上大了.Windows Azure PowerShell 是一个功能强大的脚本环境,可用 ...

  6. Redhat6下安装QEMU

    Redhat6下安装QEMU 1.下载QEUM:http://wiki.qemu.org/Download 2.解压qemu-1.6.1.tar.bz2到/tmp目录(也可以是其他目录)下,并进入解压 ...

  7. php去除数组中重复数据

    <?php /** * 去除数组中重复数据 * by www.jbxue.com **/ $input = array("a" => "green" ...

  8. SPOJ 1487 Query on a tree III(划分树)

    题目链接:http://www.spoj.com/problems/PT07J/ 题意:给出一个有根树,1为根节点,每个节点有权值.若干询问,询问以u为根的子树中权值第K小的节点编号. 思路:DFS一 ...

  9. winform中关于panel中滚动条和键盘事件几点体会

    最近在做winform开发中,遇到几个比较寄售的问题,通过上网查找计和自己琢磨,最终都圆满解决呢! 现在我将谈谈我在项目中遇到的问题集解决方案,以供大家参考! 一.就是我在使用键盘的keydown事件 ...

  10. IE JS编程需注意的内存释放问题

    1.给DOM对象添加的属性是一个对象的引用.范例:var MyObject = {};document.getElementById('myDiv').myProp = MyObject;解决方法:在 ...