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 ...
随机推荐
- url override implements session
url 重写实现会话概述 URL重写是对GET请求参数的应用,当服务器响应浏览器上一次请求时,将某些相关信息以超链接方式响应给浏览器,超链接中包括请求参数信息. 特点:URL必须以GET方式发送请求. ...
- 如何查看Ext自带的API和示例
Ext是一款富客户端开发框架,它基于JavaScript.HTML和CSS开发而成,无须安装任何插件即可在常用浏览器中创建出绚丽的页面效果. 1.下载地址http://www.sencha.com/p ...
- Oracle EBS 取总账期间
--取期间 select GPS.EFFECTIVE_PERIOD_NUM, GPS.PERIOD_NAME from GL_PERIOD_STATUSES GPS AND (GPS.SET_OF_B ...
- ASP.NET Web API 跨域访问(CORS)要注意的地方
一.客户端用JSONP请求数据 如果你想用JSONP来获得跨域的数据,WebAPI本身是不支持javascript的callback的,它返回的JSON是这样的: {"YourSignatu ...
- Linux的Transparent Hugepage与关闭方法
Transparent HugePages是在运行时动态分配内存的,而标准的HugePages是在系统启动时预先分配内存,并在系统运行时不再改变. 因为Transparent HugePages是在运 ...
- [翻译] RAReorderableLayout
RAReorderableLayout A UICollectionView layout which you can move items with drag and drop. 一种UIColle ...
- 在C中调用Matlab (转)
http://blog.163.com/rongting_chen/blog/static/164906844201252354518462/ http://www.ilovematlab.cn/th ...
- Oracle 数据库创建(图形界面操作)
Oracle 创建数据库图文分解: 1. 选择所有程序->Oracle-OraDb11g_home1->Configuration and Migration Tools -> Da ...
- Hibernate学习笔记一之注解
1.@Entiy 实体类注解 2.@Table 映射表 (name=“”)表名 3.@Coulmn @Column( name="columnName"; ...
- Golang包管理工具glide简介
Golang包管理工具glide简介 前言 Golang是一个十分有趣,简洁而有力的开发语言,用来开发并发/并行程序是一件很愉快的事情.在这里我感受到了其中一些好处: 没有少了许多代码格式风格的争论, ...