zoukankan      html  css  js  c++  java
  • Go语言连接Oracle(就我这个最全)

    综合参考了网上挺多的方案

    倒腾了半天终于连接好了

    Go都出来这么多年了

    还没有个Oracle的官方驱动。。。

    过程真的很蛋疼。。一度想放弃直接连ODBC

    首先交代一下运行环境和工具版本:

    WIN10

    MINGW64

    ORACLE INSTANCCLIENT_18_3   x64

    Jetbrins Goland

    看完这篇文章,你可以解决如下问题(正经的解决):

    编译阶段:
    1. exec: "gcc": executable file not found in %PATH%

    2. exec: "pkg-config": executable file not found in %PATH%

    3. cannot use (**_Ctype_struct_OCIServer)(unsafe.Pointer(&conn.svc))

         (type **_Ctype_struct_OCIServer) as type **_Ctype_struct_OCISvcCtx

         in argument to func literal

    运行阶段:

    1. Process finished with exit code -1073741701 (0xC000007B)

    2. exit status 3221225595

    开始

    一、下载ORACLE INSTANCCLIENT 和对应的SDK

    下载地址:https://www.oracle.com/technetwork/topics/winx64soft-089540.html

    我选用了18.3 x64的版本,能向下兼容,不用担心

    注意basic版本和sdk都需要下载下来,一共是两个文件

    下载之后先解压basic压缩包,然后将sdk解压到basic目录下:

     添加如下环境变量到系统PATH变量:(按自己的情况添加)

     二、下载安装MINGW64

    主要是解决WIN中没有GCC的问题

    如果不安装后期会出现问题:(exec: "gcc": executable file not found in %PATH%)

    因为之前下载的ORACLE INSTANCCLIENT是64位的所以我们也需要下载MINGW64才能编译

    下载地址:https://sourceforge.net/projects/mingw-w64/files/

    注意,第一个是在线安装程序,较慢,建议直接下载7z压缩包。解压即可

     解压之后,添加如下环境变量到PATH:(按自己的情况添加)

     三、获取GO-OCI8驱动

    执行命令:go get github.com/wendal/go-oci8

    会报一个错误:pkg-config: exec: "pkg-config": executable file not found in %PATH%

    先忽略,后面会解决

     四、修改OCI8.PC

    进入GOPATH目录,找到OCI8.PC文件,打开,修改 红色框的部分(按你自己的情况)

    %GoPath%srcgithub.comwendalgo-oci8windows

    然后:

    1.复制此目录下pkg-config.exe到mingw64下的bin目录

    2.复制此目录下oci8.pc到mingw64下的lib/pkg-config目录(pkg-config目录需要自己建)

     

    添加如下(PKG_CONFIG_PATH)环境变量:(按自己情况)

    五、最后一步

    执行命令:go get github.com/wendal/go-oci8

    此时执行这个操作

    应该已经没有(pkg-config: exec: "pkg-config": executable file not found in %PATH%)这个错误了,如果还有,就是上一步你做的不太对。

    但是,还会有新的错误出现,如下:

    不要慌

    打开GOPATH目录下,oci8.go文件

    路径:%GoPath%srcgithub.comwendalgo-oci8

    此文件中四处OCIServer为OCISvcCtx

     

    再次!!!!

    执行命令:go get github.com/wendal/go-oci8

    可以了,完事儿。

    让我们上一段代码,测试一下:

    package main
    
    import (
        "database/sql"
        "fmt"
        "log"
        "os"
    
        _ "github.com/wendal/go-oci8"
    )
    
    func query() {
        os.Setenv("NLS_LANG", "AMERICAN_AMERICA.AL32UTF8")
        log.SetFlags(log.Lshortfile | log.LstdFlags)
        db, err := sql.Open("oci8", "j1_bibox/oracle123@10.1.196.200:1521/zjdevdb")
        if err != nil {
            log.Fatal(err)
        }
        defer db.Close()
        rows, err := db.Query("select * from v$version")
        if err != nil {
            log.Fatal(err)
        }
        cols, _ := rows.Columns()
        rawResult := make([][]byte, len(cols))
        result := make([]string, len(cols))
        dest := make([]interface{}, len(cols))
        for i := range rawResult {
            dest[i] = &rawResult[i]
        }
        for rows.Next() {
            err = rows.Scan(dest...)
            for i, raw := range rawResult {
                if raw == nil {
                    result[i] = ""
                } else {
                    result[i] = string(raw)
                }
            }
            fmt.Printf("%s
    ", result[0])
        }
        rows.Close()
    }
    
    func main() {
        query()
    }

    走你

    就是这么刺激,还是错!!!!?????

    现在不要慌,冷静一点,分析情况

    首先,如果你的代码在IDE中运行,会报错如下:

    如果你不信这个邪,在cmd中运行,会报错如下:

    然后你拿着报错信息,去找度娘,有人会告诉你,你的instanceclient版本不对,然后你就不停的换版本,换版本,换版本

    然后发现卵用没有

    对,那个人就是我,=_=???????

    现在!!我现在!!告诉你!!

    真相只有一个!!!!!!!!

    那就是:以管理员模式运行

    来到这,无数次失败,无数次尝试最后获得成功的激动,瞬间就把你点燃。

    恐怕这就是计算机世界吸引我的地方吧。

    IDE中也可以这样解决问题:

     最后的最后,让我们给这段代码加个注释:

     

    最后的最后的最后,如有指教,请留言。

  • 相关阅读:
    加载web项目时报的错误:Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modul
    js修改title
    14.Android UiAutomator 图像处理
    13.UiAutomator 辅助APK的使用
    12.UiAutomator 获取系统信息
    11.UiAutomator 相关JAVA知识
    10.Android UiAutomator Junit 断言函数的使用
    面向对象基本关键词的解释
    Java图形界面——Border
    java文本编辑器v2.0 图形用户界面
  • 原文地址:https://www.cnblogs.com/jiangyuqin/p/10135963.html
Copyright © 2011-2022 走看看