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都需要下载下来,一共是两个文件
下载之后先解压basic压缩包,然后将sdk解压到basic目录下:
添加如下环境变量到系统PATH变量:(按自己的情况添加)
二、下载安装MINGW64
主要是解决WIN中没有GCC的问题
如果不安装后期会出现问题:(exec: "gcc":executable file not foundin %PATH%)
因为之前下载的ORACLEINSTANCCLIENT是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[0])
}
rows.Close()
}
func main() {
query()
}
走你
就是这么刺激,还是错!!!!?????
现在不要慌,冷静一点,分析情况
首先,如果你的代码在IDE中运行,会报错如下:
如果你不信这个邪,在cmd中运行,会报错如下:
以管理员模式运行
IDE中也可以这样解决问题:
转载:https://www.cnblogs.com/jiangyuqin/p/10135963.html
来源:https://www.cnblogs.com/wu-wu/p/14384989.html
猜你喜欢
- 用户认证组件:功能:用session记录登录验证状态前提:用户表:django自带的auth-userpython3 manage.py c
- 浅谈python中set使用In [2]: a = set() # 常用操作1 In [3]: a Out[3]: set()
- 1. 小整数对象池整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间。Python
- 本文主要是介绍Go,从语言对比分析的角度切入。之所以选择与Python、Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性,
- 考察对于知识的理解,除了实际的代码运用,还有一种方法就是问答类的题型。不同于普通的概念叙述,小编认为即使是面试题也会带有一些数学题目的影响,
- JSON简介JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于ECMAScript的一个子集
- 本文实例讲述了Python动态导入模块的方法。分享给大家供大家参考,具体如下:一、正常导入模块正常模块导入方式: import module
- 一、问题描述当用JS调用form的方法submit直接提交form的时候,submit事件不响应。为什么?知道的请回复。类比一下,我用inp
- 使用MySQL,安全问题不能不注意。以下是MySQL提示的23个注意事项:1.如果客户端和服务器端的连接需要跨越并通过不可信任的网络,那么就
- ORM模型介绍随着项目越来越大,采用写原生SQL的方式在代码中会出现大量的SQL语句,那么问题就出现了:SQL语句重复利用率不高,越复杂的S
- 学习前言我发现不仅有很多的Keras模型,还有很多的PyTorch模型,还是学学Pytorch吧,我也想了解以下tensor到底是个啥。Py
- 购物车的设计目标 从程序员的观点来看,购物车是维护购物者商品选购、允许察看、允许修改的一个对象。购物车本身是一个非常简单的程序,但开发者要考
- 1.介绍PDF 格式是与平台无关,它独立于底层操作系统和渲染引擎。事实上,PDF 是基于一种脚本语言—&mdas
- SQL Server通常都运行在多处理器的服务器上,这一点在现在尤为普遍。原因是多内核的处理器越来越普及。那么,在多处理器环境下,Windo
- 本文实例讲述了PHP实现的XXTEA加密解密算法。分享给大家供大家参考,具体如下:<?php/** * Xxtea 加密实现类 */c
- 问题:安装lightgbm成功后,无法在anaconda jupyter notebook中导入lightgbm包原因:lightgbm默认
- Python中和Pandas中数据类型对应关系如下:果数据是纯净的数据,可以转化为数字astype基本也就是两种用作,数字转化为单纯字符串,
- 通过文件夹导入包要求每个目录下都有一个__init__.py文件,此文件可空白。也可不空。a@ubuntu:~/Desktop$ tree
- Python的标准库中的os模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。即它允许一个程序在编写后
- 如下所示:def list_dict_duplicate_removal(): data_list = [{"a&qu