• Golang连接Oracle数据库


    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_2sdk

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

    注意,后面你装的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:mingwin下
    将oci8.pc复制到C:mingwlibpkg-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:MinGWin;
    PKG_CONFIG_PATH=C:MinGWlibpkg-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 ns 目录下了。

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

    set TNS_ADMIN=C:instantclient_12_1 ns

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

     

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

    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

  • 相关阅读:
    Java学习之IO之File类一
    Java学习之二分查找算法
    Java学习之国际化程序
    Java学习之自定义异常
    Java学习之开篇—个人随想
    pl/sql 的 put和put_line区别
    Java中static、final用法
    一个包含所有c++的头文件的头文件
    Codeforces Round #379 (Div. 2)
    hdu-5977 Garden of Eden(树分治)
  • 原文地址:https://www.cnblogs.com/ghj1976/p/3437250.html
Copyright © 2020-2023  润新知