golang连接orcale

使用glang有一段时间了,最开始其实并不太喜欢他的语法,但是后来熟悉之后发现用起来还挺爽的。之前数据库一直使用mysql,连接起来没有什么问题,github上有很多完善的驱动,所以以为连接其他数据库也应该没什么问题,近日听说其连接orcale比较麻烦,所以就试了试。

之所以连接orcale比较麻烦是因为orcale并没有提供golang的驱动,所以并不能像java那样引入个驱动包就能连接,也不能像mysql之类的开源数据库可以自己实现驱动。不过正所谓天无绝人之路,既然纯go实现不了,那么还可以用cgo实现,c语言总该支持了吧。
    网上有很多方法,不过都是使用oci实现的,这里我们使用go-oci8(https://github.com/wendal/go-oci8)

一、安装MinGW

首先我们先来配置环境,由于cgo需要gcc支持,所以需要配置gcc环境,如果是linux下一般可以跳过该步骤,win下则需要自己安装了,这里我们使用MinGW,可以到官网现下载,不过官网直接提供的安装程序需要安装时联网下载,很可能会失败,所以几经搜索之后找到如下网址:

  • MinGW下载地址相关:http://blog.csdn.net/mecho/article/details/24305369

里边详细介绍了MinGW各版本的不同,可根据自己情况下载,由于我是64位,这里下载64位的POSIX版本
    具体的安装过程就不费话了,直接解压即可。

二、安装OCI

由于没有对应驱动包,我们不能直接连接,所以需要通过orcale提供OCI接口(有点像odbc),里边包含需要的类库。下载直接官网就行,找到系统对应版本:

  • oci下载地址:http://www.oracle.com/technetwork/topics/winsoft-085727.html

需下载Basic和SDK,下载后解压Basic到instantclient_11_1,然后将SDK解压到instantclient_11_1\sdk下。
    在instantclient_11_1下建立\network\admin\目录,添加tnsnames.ora(这个就不解释了吧),内容根据自己的orcale设置。

三、配置go-oci8

直接go get github.com/wendal/go-oci8(报错不用管),然后到go\src\github.com/wendal\go-oci8\windows下,将pkg-config.exe拷贝到MinGW\bin下,将oci8.pc复制到MinGW\lib\pkg-config\下,并且编辑oci8.pc:

# Package Information for pkg-config
prefix=修改为instantclient_11_1目录,如F:/dev/instantclient_11_1
exec_prefix=修改为instantclient_11_1目录,如F:/dev/instantclient_11_1
libdir=${exec_prefix}
includedir=${prefix}/sdk/include/

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

四、设置环境变量

环境变量path下添加instantclient_11_1和mingw\bin的路径
    添加PKG_CONFIG_PATH=C:\mingw\lib\pkg-config
    添加TNS_ADMIN=F:\dev\instantclient_11_1\network\admin\

五、测试

在此执行go get github.com/wendal/go-oci8,如果没错那说明大功告成。具体测试代码见github.com\wendal\go-oci8\example下的oracle.go,注意要把里边import中的mattn改成wendal。一下是我的代码:

package main
import (
    "database/sql"
    _ "github.com/wendal/go-oci8"
    "log"
)
func query() {
    // 为log添加短文件名,方便查看行数
    log.SetFlags(log.Lshortfile | log.LstdFlags)
    // 用户名/密码@实例名  跟sqlplus的conn命令类似
    db, err := sql.Open("oci8", "username/[email protected]")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    rows, err := db.Query("select name from FUB_B")
    if err != nil {
        log.Fatal(err)
    }

    for rows.Next() {
        var name string
        rows.Scan(&name)
        log.Printf("Name = %s, len=%d", name, len(name))
    }
    rows.Close()
}

func update() {
    // 为log添加短文件名,方便查看行数
    log.SetFlags(log.Lshortfile | log.LstdFlags)
    // 用户名/密码@实例名  跟sqlplus的conn命令类似
    db, err := sql.Open("oci8", "username/[email protected]")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    stmt, _ := db.Prepare(`UPDATE FUB_B set name =‘cnm‘`)
    result, err := stmt.Exec()
    if err != nil {
        log.Fatal(err)
    }
    count, _ := result.RowsAffected()
    log.Printf("result count:%d", count)
}

func main() {
    update()
}

golang连接orcale

时间: 2024-10-21 04:18:11

golang连接orcale的相关文章

windows下用golang连接mssql

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 安装Microsoft SQL Server Native Client 安装golang的mssql驱动 写测试代码 我擦,最近下了几十个G的数据(哈哈,你们懂的),都是mssql格式的,需要处理下.想用golang处理,于是就需要golang连接mssql. 1.安装Microsoft SQL Server Native Client 去官方下载吧,下载地址: [plain] view plain copy print?

配置django连接ORCALE数据库

Django安装.配置流程 预备过程: 安装Python以及pip(对于目前新版本的Python,安装过程中会自带pip安装) Django安装过程: Step1:利用pip安装django. 在命令行执行如下命令: pip install django Step2:进入准备新建django项目的目录 执行如下命令创建一个项目: django-admin.py startproject mysite 其中,mysite表示项目名称. Step3:进入外层mysite文件夹内,执行如下命令并测试服

Golang 连接Kafka

Kafka介绍 Kafka是Apache软件基金会开发的一个开源流处理平台,由Java和Scala编写:Kafka是一种高吞吐.分布式.基于订阅发布的消息系统. Kafka名称解释 Producer:生产者 Consumer:消费者 Topic:消息主题,每一类的消息称之为一个主题 Broker:Kafka以集群的方式运行,可以由一个或多个服务器组成,每个服务器叫做一个broker Partition:物理概念上的分区,为了提供系统吞吐量,在物理上每个Topic会分为一个或多个Partition

spring下,druid,c3p0,proxool,dbcp四个数据连接池的使用和配置

由于那天Oracle的数据连接是只能使用dbcp的数据库连接池才连接上了,所以决定试一下当下所有得数据库连接池连接orcale和mysql,先上代码 配置文件的代码 1 #=================dbcp连接池======================# 2 #Oracle数据库连接 3 #jdbc_driverClassName=oracle.jdbc.driver.OracleDriver 4 #jdbc_url=jdbc:oracle:thin:@localhost:1521:

Linux(Centos)下jdbc连接oracle速度超慢的问题

最近在centos下写个java swing程序,发现在linux用jdbc连接oracle及其缓慢,还经常失败.但是同样的程序在windows下运行就连接的非常快.网上搜索了很长时间都和我这情况没关系,偶然看到了下面的文章: 原文地址http://www.xuebuyuan.com/200181.html 解决使用JDBC连接orcale速度慢的问题 2012年04月01日 ⁄ 综合 ⁄ 共 341字 ⁄ 字号 小 中 大 ⁄ 评论关闭 使用java 开发程序,选用ojdbc14.jar的驱动

jetbrains golang IDE

非常好的IDE,叫goland. 支持最新的golang1.8了 下载地址: https://www.jetbrains.com/go/ 开始使用手册: https://www.jetbrains.com/help/go/1.0/getting-started-with-gogland.html 只有一直都是使用Java的ide然后在加上Go plugin进行开发的. 有新的ide就用新的吧. golang也发展到了1.8的版本更新速度快啊. 下载地址: https://golang.org/d

golang http的按序号发送,按序号接收

应用场合:比如http请求,有先后次序,需要实现:先请求(request)先发送,并且读取(response)的时候也是遵循这个规则,这个读写构成一个pair(有请求并有返回) 过来,直接上代码吧: func (cc *ClientConn) Do(req *http.Request) (resp *http.Response, err error) { err = cc.Write(req) //client向http服务器发送请求 if err != nil { return } retur

在Golang中使用Redis

周五上班的主要任务是在公司老平台上用redis处理一个队列问题,顺便复习了一下redis操作的基础知识,回来后就想着在自己的博客demo里,用redis来优化一些使用场景,学习一下golang开发下redis的使用. Redis简单介绍 简介 关于Redis的讨论,其实在现在的后台开发中已经是个老生常谈的问题,基本上也是后端开发面试的基本考察点.其中 Redis的背景介绍和细节说明在这里就不赘述.不管怎么介绍,核心在于Redis是一个基于内存的key-value的多数据结构存储,并可以提供持久化

Linux连接oracle

su - oracle //登录sqlplus sqlplus /nolog //连接orcale conn xx/xx;(用户名/密码)  或者 connect /as sysdba; 原文地址:https://www.cnblogs.com/monkeybrother/p/10366219.html