Go语言连接Oracle数据库的方法

作者:灬菜鸟灬 时间:2024-01-14 04:15:33 

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

WIN10

MINGW64

ORACLEINSTANCCLIENT_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

开始

一、下载ORACLEINSTANCCLIENT 和对应的SDK

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

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

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

Go语言连接Oracle数据库的方法

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

Go语言连接Oracle数据库的方法

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

Go语言连接Oracle数据库的方法

二、下载安装MINGW64

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

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

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

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

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

Go语言连接Oracle数据库的方法

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

Go语言连接Oracle数据库的方法

三、获取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%\src\github.com\wendal\go-oci8\windows

Go语言连接Oracle数据库的方法

然后:

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

Go语言连接Oracle数据库的方法

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

Go语言连接Oracle数据库的方法

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

Go语言连接Oracle数据库的方法

五、最后一步

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

此时执行这个操作

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

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

Go语言连接Oracle数据库的方法

不要慌

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

路径:%GoPath%\src\github.com\wendal\go-oci8

此文件中四处OCIServer为OCISvcCtx

Go语言连接Oracle数据库的方法

再次!!!!

执行命令: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\n", result[0])
 }
 rows.Close()
}

func main() {
 query()
}

走你

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

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

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

Go语言连接Oracle数据库的方法

Go语言连接Oracle数据库的方法

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

Go语言连接Oracle数据库的方法

以管理员模式运行

Go语言连接Oracle数据库的方法

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

Go语言连接Oracle数据库的方法

转载:https://www.cnblogs.com/jiangyuqin/p/10135963.html

来源:https://www.cnblogs.com/wu-wu/p/14384989.html

标签:Go语言,Oracle
0
投稿

猜你喜欢

  • MySQL数据库索引原理及优化策略

    2024-01-20 00:35:42
  • MySql多表链接查询详细教程

    2024-01-16 06:03:33
  • 在python中bool函数的取值方法

    2021-10-06 00:47:37
  • Python tempfile模块学习笔记(临时文件)

    2022-05-27 02:32:08
  • Python利用matplotlib绘制约数个数统计图示例

    2023-11-12 16:00:43
  • CSS样式表:详细介绍IE7新支持的选择器

    2007-10-09 18:24:00
  • Python实现的爬取豆瓣电影信息功能案例

    2023-07-18 21:59:25
  • 教你漂亮打印Pandas DataFrames和Series

    2022-11-10 19:08:56
  • 用asp获取微软安全更新列表的代码 小偷程序

    2011-02-24 11:19:00
  • 记录微信小程序 height: calc(xx - xx);无效问题

    2024-05-02 16:27:16
  • JS自定义混合Mixin函数示例

    2024-04-16 10:29:41
  • python中使用psutil查看内存占用的情况

    2022-11-11 11:26:22
  • Python爬虫如何应对Cloudflare邮箱加密

    2023-10-16 22:25:35
  • Javascript中的isNaN函数使用说明

    2023-08-27 10:10:02
  • 关于人物角色设计讨论

    2008-10-16 13:47:00
  • 在js(jquery)中获得文本框焦点和失去焦点的方法

    2024-04-26 17:14:20
  • 解决Python pandas df 写入excel 出现的问题

    2021-07-27 15:37:21
  • 在Python中使用itertools模块中的组合函数的教程

    2023-11-06 16:31:36
  • 如何使用flask将模型部署为服务

    2021-11-11 06:02:48
  • Python+OpenCV实现分水岭分割算法的示例代码

    2021-01-11 05:01:38
  • asp之家 网络编程 m.aspxhome.com