首页 > 数据库 >Golang连接Oracle数据库

Golang连接Oracle数据库

时间:2023-07-18 21:00:45浏览次数:48  
标签:OCI github 数据库 Golang oracle MinGW go Oracle com

Golang连接Oracle的库有很多,比较常见的如下:

不过,oralce 只提供了 oci8 的接口,必须通过它来调用,所以下面方案都逃不过相关设置。

1、go-db-oracle

地址: https://code.google.com/p/go-db-oracle/

官方介绍:

Oracle Driver using cgo to call OCI libraries from Oracle Instant Client 11. Developed with Linux Status initial: connects, authenticates, basic SELECTs, missing error control, not deallocating memory

关键点:

  • 使用CGO开发的;
  • 基于Oracle 11
  • 基于Linux环境下

2、go-oci8

地址:https://github.com/wendal/go-oci8

它是 https://github.com/mattn/go-oci8 的分支, 增加了windows下中文的安装说明及相关文件

安装步骤,注意它的安装方式跟之前方式不一样了:之前是 http://wendal.net/459.html 这里提供的步骤, 跟github上安装步骤不一样。以github的为准。

 

2.1、安装最新版的git,并设置可以从命令行直接调用git命令。

安装方式请看下面这篇文章:

https://github.com/wohugb/git-reference/blob/master/Getting-Started/Installing-Git.rst

比如我安装的是 Git-1.8.4-preview20130916 这个 版本。

 

2.2、下载OCI最新版,

存放于C:\instantclient_12_1

OCI是指ORACLE调用接口(Oracle Call Interface),它提供了一组可对ORACLE数据库进行存取的接口子例程(函数),通过在代程序设计语言(如C语言)中进行调用可达到存取ORACLE数据库的目的。

OCI是集成在 Oracle Database Instant Client 的Basic 版本中的。下载地址如下:
http://www.oracle.com/technetwork/database/features/instant-client/index.html

注意,后面你装的MinGW是64位版本,就需要OCI也是64位版本, 如果MinGW是32位版本,则需要OCI是32位版本。

 

2.3、下载OCI SDK最新版,

存放于C:\instantclient_11_2\sdk

下载地址仍然是上面地址。

注意,后面你装的MinGW是64位版本,就需要OCI也是64位版本, 如果MinGW是32位版本,则需要OCI是32位版本。

 

2.4、下载MinGW最新版,

下载地址:http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/  下载后安装在C:\mingw。

MinGW全称Minimalist GNU For Windows,是个精简的Windows平台C/C++、ADA及Fortran编译器,相比Cygwin而言,体积要小很多,使用较为方便。MinGW提供了一套完整的开源编译工具集,以适合Windows平台应用开发,且不依赖任何第三方C运行时库。(http://www.mingw.org/wiki/Getting_Started

参考:

 

如果你安装的是MinGW 64 位版本,请参看下面这篇文章:

 

 

如果 MinGW是64位, oci 是32 会,编译时会报错:

ld.exe: skipping incompatible C:/instantclient_12_1/oci.dll when searching for -loci 

2.5、下载pkg-config.exe和oci8.pc

(已经存放在windows文件夹下,)
将pkg-config.exe复制到C:\mingw\bin\下
将oci8.pc复制到C:\mingw\lib\pkg-config\下

注意,oci8.pc 需要根据你下载的 oci进行修改。下面是我根据我下载的oci版本做的修改。

# Package Information for pkg-config

prefix=C:/instantclient_12_1
exec_prefix=C:/instantclient_12_1
libdir=${exec_prefix}
includedir=${prefix}/sdk/include/

Name: OCI
Description: Oracle database engine
Version: 12.1
Libs: -L${libdir} -loci
Libs.private:
Cflags: -I${includedir}

2.6、修改系统环境变量,

添加
PATH=原有PATH;C:\instantclient_12_1;C:\MinGW\bin;
PKG_CONFIG_PATH=C:\MinGW\lib\pkg-config

2.7、下载相关源码。

执行 go get github.com/wendal/go-oci8

 

 

2.8、测试一下:


    cd %GOPATH%/src/github.com/wendal/go-oci8/example

    go run oracle.go 

   

2.9、配置Oracle连接字符串

在一个目录下新建一个 tnsnames.ora 文件,用于配置连接字符串别名。

这个文件内容类似如下,参考 http://hi.baidu.com/sunxden/item/f5e1423a9bfc298df4e4ad4b

ORA10 =    
(DESCRIPTION =     
   (ADDRESS_LIST =     
     (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.1)(PORT = 1521))     
   )     
   (CONNECT_DATA =     
     (SERVICE_NAME = ora10)     
   )     
)

比如我是把这个文件放在 C:\instantclient_12_1\tns 目录下了。

修改全局配置文件,增加一个 TNS_ADMIN 设置 ,指向这个目录。

set TNS_ADMIN=C:\instantclient_12_1\tns

这杨我们连接字符串就可以写成  用户名/密码@实例名

 

 
这个包网上看到下面一些问题:

https://groups.google.com/forum/#!topic/golang-china/4OmCsvqRcKA

 

3、goci

https://github.com/hlife/goci  它是修改自 https://github.com/egravert/goci

作者提供的编译注意事项:
在相关程序中我加了 cgo 编译时需加的头文件和连接库
#cgo CFLAGS: -I/home/oracle/app/oracle/product/11.2.0/client_1/rdbms/public
#cgo LDFLAGS: -lclntsh -L/home/oracle/app/oracle/product/11.2.0/client_1/lib
您在使用时,请将 /home/oracle/app/oracle/product/11.2.0/client_1 修改为你的
系统中 $ORACLE_HOME 的字串值

如果你使用简易的安装包,请在

http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
下载:
oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm
并安装和设置oracle环境变量。
同时需设置
export TNS_ADMIN=/home/oracle/app/oracle/product/11.2.0/client_1/network/admin
### ORACLE_HOME 以您系统实际情况进行修改。

 

参考资料:

 

 

参看资料:

golang 和 oracle 数据库编程类库介绍
http://bbs.mygolang.com/thread-202-1-1.html

golang 在 redhat linux 下如何连接 oracle?

微博上一些相关讨论
http://s.weibo.com/weibo/golang%2520oracle&b=1&page=1

标签:OCI,github,数据库,Golang,oracle,MinGW,go,Oracle,com
From: https://blog.51cto.com/u_15588078/6768354

相关文章

  • 数据库基础
    正文:基本介绍Navicat基本使用数据库操作数据表操作数据操作-增删改 数据库:是指长期存储在计算机内、有组织的数据集合表是数据库中存储数据的基本单位,数据按照分类存储到不同的表中,能够非常高效的查询其中的数据。 常见数据库分类:关系型数据库非关系型数据库查......
  • Oracle 主键冲突报错踩坑-- "ORA-00001: 违反唯一约束条件 "
    根本原因因为特殊字符存在导致的主键冲突报错细节分析前提oracle中存在一张table,table中存在字段CName(nvarchar),且该字段为唯一主键;具体现有一条数据需要入库,内容如下'中信建投惠享债券型证券投资基金​'(包含零宽空格符)直接根据这个字段值查询数据库值是不存在的sel......
  • centos7 下全局配置最新版的golang语言开发环境
    按照以下步骤进行操作:前往Go官方网站下载页面(https://golang.org/dl/)查找最新版本的Go二进制文件。使用wget命令下载最新版本的Go二进制文件。例如,如果最新版本是1.17,执行以下命令:$wgethttps://golang.org/dl/go1.17.linux-amd64.tar.gz解压缩下载的压缩包:$sudota......
  • jfinal 框架学习笔记-第三天 Model相关学习--record+Model增删改查的用法(震惊之今日刷
    1.了解了数据库连接池。其中使用最多也是最广泛的是druid数据库连接池也就是阿里云研发的数据库连接池2.ActiveRecord(jFinal的核心技术)+DruidPlugin(数据库连接词,如何与数据库打交道)ActiveRecord:1.Record(记录,相当于一个通用的Model),2.Model(提供日常CRUD的封装)Model示例......
  • 什么是 数据框,与数据库 有什么区别
    数据框(DataFrame)是一种二维数据结构,它类似于表格,具有行和列的结构。数据框是一种常见的数据结构,用于在统计分析和数据处理中存储和操作数据。在数据框中,每一列可以是不同的数据类型,如数值、字符、逻辑值等。数据框通常被用于在编程语言中处理和分析数据,例如R语言的数据框。数据......
  • golang 重塑切片指针接口
    result*[]xxx  1.判断接口是否为空   2.构造新指针类型,并赋值空切片ifreflect.ValueOf(result).Elem().IsNil(){resultType:=reflect.TypeOf(result).Elem()t2:=reflect.New(resultType)t3:=t2.Elem()t3.Set(reflect.......
  • 用 Golang 从0到1实现一个高性能的 Worker Pool(一) - 每天5分钟玩转 GPT 编程系列(3)
    目录1.概述2.设计2.1让GPT-4给出功能点2.2自己总结需求,再给GPT派活3.实现3.1你先随意发挥3.2你得让Worker跑起来呀3.3你说说Pool满了怎么办3.4你得把UT给我加上3.5你再给我把文档补上4.总结1.概述话说,早几天一口气过了一遍Golang的并发机制:跟着GPT-4......
  • Linux系统ORACLE重启命令
    如下:一、在Linux下重启Oracle数据库及监听器:1.以oracle身份登录数据库,命令:su-oracle2.进入Sqlplus控制台,命令:sqlplus/nolog3.以系统管理员登录,命令:connect/assysdba4.启动数据库,命令:startup如果是关闭数据库,命令:shutdownimmediate5.退出sqlplus控制台,命令:exit......
  • 导入大文件数据库报错500怎么解决?
    我们在数据库导入大文件的数据库时,会报错HTTP500InternalServerError的错误,HTTP500InternalServerError通常表示服务器无法处理请求,这有很多原因导致,下面我们来分析下可能的原因和解决方法。1、数据库文件过大:可以采用软件或第三方数据库管理工具导入,可以解决数据库文件......
  • ubuntu16.04安装qdrant向量数据库
    qdrant向量数据库目前只支持docker部署1、安装docker(如果已经安装,跳过)在服务器上安装一下docker,下面是在ubutnu下安装docker1aptupdate2aptinstallapt-transport-httpsca-certificatescurlgnupglsb-release3curl-fsSLhttps://download.docker.com/linux/ubuntu/......