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/pwd@ORCL")
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/pwd@ORCL")
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
标签: golanggoorcaleoci

go orcale的更多相关文章

  1. orcale删除重复数据

    1.删除orcale重复数据, delete from da_door awhere (a.dt,a.key1) in (select dt,key1 from da_door group by dt ...

  2. Orcale(一)概念

    一 . 基本概念 :   1. orcaleinstanceclient : orcale的客户端  ( 1. 中文乱码问题 : NLS_LANG=SIMPLIFIED CHINESE_CHINA.Z ...

  3. orcale 循环插入 测试数据

    以前开发一直用的是sql server   定义临时变量 循环插入数据到表中已经成为一种固定的模式,本来想orcale应该也一样吧 都是数据库.. 结果被现实无情的打击到了.在网上找办法,求大神 最后 ...

  4. orcale同一条语句运行速度差异问题

    在oracle中执行一个查询语句,该语句首次执行时orcale会把其内容存入SGA(系统全局区)中,下次再执行同一条语句的时候就不再去解析该语句,而是直接从SGA区中取出该语句执行,但是前提是SQL没 ...

  5. Orcale Function Sequence

    Orcale Function Sequence. 1 Create Or Replace Function F_Get_Sequence(As_Companyno In Varchar2, As_T ...

  6. sqlserver分页;mysql分页;orcale分页 的sql 查询语句

    一,sqlserver分页: )) ID FROM 表名 AS 表名1_1 ORDER BY ID)) ORDER BY ID; 二:mysql分页 )*每页显示的数据条数,当前页码 * 每页显示的数 ...

  7. Orcale安装完成后 em管理、性能无法登陆 报:没有找到主机

    先在我的电脑环境变量中加入oracle_sid=orcl 在Orcale主目录中查找emd.properties 文件修改(时间格式) agentTZRegion=GMT agentTZRegion= ...

  8. orcale装完sqldevelop启动不了

    一直在搞考试,昨天考java企业级开发要交项目搞得我装系统后又装了个orcale,每次重新配百度太麻烦,还好记得点,记录下碰到的错误 64位的系统下的orcale11 64位里面的sqldevelop ...

  9. MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法

    在这里主要讲解一下MySQL.SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法. 可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应 ...

随机推荐

  1. VisualSVN

    Symptoms When performing a large commit to VisualSVN Server over the HTTPS protocol, the Subversion ...

  2. Android经常使用的布局类整理(一)

    Android经常使用的布局类整理 近期又回头做了一下android的项目,发觉越来越不从心,非常多东西都忘了,简单的页面布局也非常多写不出来,首先还是先整理一下一些会混淆的概念先 layout_wi ...

  3. POJ 2502 Subway (Dijkstra 最短+建设规划)

    Subway Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6689   Accepted: 2176 Descriptio ...

  4. NYOJ 904 search(stable_sort函数的应用)

    描述 游戏积分的排行榜出来了,小z想看看得某个积分的人是谁.但是由于人数很多,他自己找很浪费时间,所以他想请你帮忙写一个程序,能快速的帮他找到他想要找的人   输入 多组测试数据,第一行有一个数T,表 ...

  5. 经典算法题每日演练——第六题 协同推荐SlopeOne 算法

    原文:经典算法题每日演练--第六题 协同推荐SlopeOne 算法 相信大家对如下的Category都很熟悉,很多网站都有类似如下的功能,“商品推荐”,"猜你喜欢“,在实体店中我们有导购来为 ...

  6. 做ACM该伤不起啊!!

    開始搞ACM啊!! ! .! ! ! ..! 从此踏上了尼玛不归路啊! !! !!! !!.!!! 谁特么跟劳资讲算法是程序设计的核心啊..! ! ! .  尼玛除了面试题就没见过用算法的地方啊!!! ...

  7. WebView无法放大缩小解决方式

    先看看我们之前所写的代码 1) 加入权限:AndroidManifest.xml中必须使用了许可"android.permission.INTERNET" 2) 使用了一个WebV ...

  8. Socket 由浅入深系列--------- 简单实现编程(三)

    socket 由浅入深 原理(一)介绍了一些,以下也就是简单实现,并未考虑其它性能化! 使用TCP的server客户机举例 server 设置一个简单的TCPserver涉及下列步骤: 调用 sock ...

  9. Redhat Enterprise server 6.3 构造VPN

    一.软体 dkms.kernel_ppp_mppe.pptpd 二.下载软件 wget http://sourceforge.net/projects/poptop/files/mppe%20modu ...

  10. REDGATE SQL TEST的使用

    原文:REDGATE SQL TEST的使用 REDGATE SQL TEST的使用 SQL TEST下载和破解可以参考这篇文章:http://www.cnblogs.com/VAllen/archi ...