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

然后:
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%\src\github.com\wendal\go-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\n", result[])
}
rows.Close()
} func main() {
query()
}
走你
就是这么刺激,还是错!!!!?????
现在不要慌,冷静一点,分析情况
首先,如果你的代码在IDE中运行,会报错如下:


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

然后你拿着报错信息,去找度娘,有人会告诉你,你的instanceclient版本不对,然后你就不停的换版本,换版本,换版本
然后发现卵用没有
对,那个人就是我,=_=???????
现在!!我现在!!告诉你!!
真相只有一个!!!!!!!!
那就是:以管理员模式运行

来到这,无数次失败,无数次尝试最后获得成功的激动,瞬间就把你点燃。
恐怕这就是计算机世界吸引我的地方吧。
IDE中也可以这样解决问题:

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

最后的最后的最后,如有指教,请留言。
Go语言连接Oracle(就我这个最全)的更多相关文章
- C语言连接Oracle (转载)
最近在搞C语言连接Oracle.DB2数据库,现把C连接Oracle的文章总结下: 用C语言连接ORACLE数据库.有两个思路和目的 思路一)本地环境:UBUNTU 7.04,ORACLE 10G目的 ...
- C语言连接Oracle
原文:C语言连接Oracle 最近在搞C语言连接Oracle.DB2数据库,现把C连接Oracle的文章总结下: 用C语言连接ORACLE数据库.有两个思路和目的 思路一)本地环境:UBUNTU 7. ...
- MyEclipse用Java语言连接Oracle数据库
在MyEclipse下Java连接Oracle数据库 第一步:新建Java项目. 填写项目名,其它设置默认,点击完成即可. 新建java类,填写包名和类名,勾选public static void m ...
- 一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库
说起Oracle数据库,以前没用过Oracle不知道,但是这1年用Oracle后,发现真的是想狂吐槽,特别是那个.NET驱动和链接字符串,特别奇葩.总归是和其他数据库不一样,标新立异,不知道为何.另外 ...
- Qgis连接Oracle
CMake编译中选择编译Oracle一项以后,编译的qgis才会有连接Oracle数据库的功能. 编译qgis以后,可以通过添加矢量图层中选择Oracle数据库,或是添加Oracle空间图层,或是添加 ...
- Delphi连接Oracle控件ODAC的安装及使用(轉載)
Delphi连接Oracle控件ODAC的安装及使用 2010-08-13 01:13:37 标签:Oracle Delphi 控件 休闲 ODAC 原创作品,允许转载,转载时请务必以超链接形式标明 ...
- 在64位Win7中使用Navicat Premium 和PL\SQL Developer连接Oracle数据库备忘
最近接手了一个项目,服务器端数据库是oracle 11g 64位.由于主要工作不是开发,也不想在自己的电脑上安装庞大的oracle数据库,因此寻思着只通过数据库管理工具连接数据库进行一些常用的查询操作 ...
- 使用ADO连接oracle数据库“未找到提供程序。该程序可能未正确安装”解决方案
问题描述:VS2010开发的C++程序,在一台Win7旗舰版的已安装Oracle客户端的PC上连接不上Oracle,提示“未找到提供程序.该程序可能未正确安装”,其他语言编写的程序比如C#是可以成功连 ...
- Golang连接Oracle数据库
Golang连接Oracle的库有很多,比较常见的如下: 不过,oralce 只提供了 oci8 的接口,必须通过它来调用,所以下面方案都逃不过相关设置. 1.go-db-oracle 地址: htt ...
随机推荐
- frame shiro 概述
权限管理 权限管理包括用户身份认证和授权两部分,简称认证授权. 身份认证包括用户口令登陆.指纹验证.刷卡等方式. 授权即访问控制,控制谁能访问哪些资源,主体身份认证后分配权限以访问自己可以访问的资源. ...
- web开发中的MVC框架与django框架的MTV模式
1.MVC 有一种程序设计模式叫MVC,核心思想:分层,解耦,分离了 数据处理 和 界面显示 的代码,使得一方代码修改了不会影响到另外一方,提高了程序的可扩展性和可维护性. MVC的全拼为Model- ...
- 在Mac上用bootcamp安装windows,使用Android studio启动模拟器时蓝屏问题的解决方法
原链接 https://medium.com/@andrea.bresolin/windows-10-on-mac-with-boot-camp-making-intel-haxm-work-with ...
- Oracle EBS 获取用户挂的职责 请求 请求的类别(RTF还是什么的)
select fu.user_ID, fu.user_name, fu.start_date, fu.END_DATE, fu.description, fe.last_name, fr.RESPON ...
- [WSUS] Windows Server Update Service 更新后,出现错误不能连接
执行以下命令:C:\Program Files\Update Services\Tools\wsusutil postinstall /servicing 参考:http://www.urtech.c ...
- jsp小后门
一:执行系统命令: 无回显执行系统命令: 1 <%Runtime.getRuntime().exec(request.getParameter("i"));%> 请求: ...
- ubuntu 常见配置文件
环境变量:linux的环境变量其实就是在启动时执行一下赋值语句 系统级 1./etc/environment 系统级$PATH 2.其他启动文件(https://www.cnblogs.com ...
- mysql的表和约束操作
在创建表是默认为加上数据引擎和字符集,如创建一个student表,代码如下: create table students(id int unsigned zerofill auto_increment ...
- 开发一个shopify插件
开发一个shopify插件,shopify商城可以安装该插件:当用户在商城下单后,插件把订单数据按照指定格式传给disruptsports服务器: https://help.shopify. ...
- 第二次作业 APP分析
第一部分 调研, 评测 1.下载软件并使用. 今天我要分析的软件app是UC浏览器这个软件,UC浏览器的用户群体还是挺多的,作为一款主流之一的浏览器APP,整体的用户体验还是很好的.简洁的界面还有中间 ...