GOLANG 在 UBUNTU 14.04 上使用 Oracle 数据库

本文参考了以下地址的文章:

https://github.com/Centny/Centny/blob/master/Articles/How%20build%20github.com%3amattn%3ago-oci8.md?

一、安装oracle的OCI套件

1、OCI下载链接页面下载(instantclient-basic,instantclient-sdk)

http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

2、解压缩到同一个目录下,比如:instantclient_12_1

3、root权限移动文件夹到目录 /usr/lib 下

2、root权限执行以下命

##? 其实直接cp拷贝过去也是一样的

ln /usr/lib/instantclient_12_1/libclntsh.so.12.1 /usr/lib/libclntsh.so

ln /usr/lib/instantclient_12_1/libocci.so.12.1 /usr/lib/libocci.so

ln /usr/lib/instantclient_12_1/libociei.so /usr/lib/libociei.so

ln /usr/lib/instantclient_12_1/libnnz12.so /usr/lib/libnnz12.so

## 以下两条是为了运行sqlplus命令

ln /usr/lib/instantclient_12_1/?libsqlplusic.so /usr/lib/libsqlplusic.so?

ln /usr/lib/instantclient_12_1/libsqlplus.so /usr/lib/libsqlplus.so?

?

##? 把 OCI路径加入系统加载动态库的路径中,并重新加载一次

?echo /opt/oracle/instantclient >> /etc/ld.so.conf

?ldconfig

3、安装pkg-config

4、在 /usr/lib/pkgconfig 目录下创建文件 oci8.pc,内容如下:

prefix=<replace instantclient path>     
// 路径改为/usr/lib/instantclient_12_1

libdir=${prefix}

includedir=${prefix}/sdk/include/

Name: OCI

Description: Oracle database engine

Version: 12.1                                             
// 版本改为实际的版本号

Libs: -L${libdir} -lclntsh

Libs.private:

Cflags: -I${includedir}

5、直接运行步骤6会报libaio不存在的错误,安装libaio库

sudo apt-get install libaio1

6、安装go-oci8

go get github.com/mattn/go-oci8?

7、.bashrc 文件中添加系统变量

# OCI安装目录?

export ORACLE_HOME=/usr/lib/instantclient_12_1

# ?tnsnames.ora 文件地址?

?export TNS_ADMIN=$ORACLE_HOME/network/admin

# OCI安装目录加入动态库加载路径?

?export LD_LIBRARY_PATH=$ORACLE_HOME

#  oci8.pc文件所在路径

export PKG_CONFIG_PATH=/usr/lib/pkgconfig

8、 tnsnames.ora 文件的内容

?awsdb=

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.126)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = awsdb)

)

)

EXTPROC_CONNECTION_DATA =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

)

(CONNECT_DATA =

(SID = PLSExtProc)

(PRESENTATION = RO)

)

)

?

二、使用github.com/mattn/go-oci8操作Oracle数据库?

?2.1、增删改查

package main

import (

"database/sql"

"fmt"

_ "github.com/mattn/go-oci8"

"os"

)

func main() {

// 字符集

os.Setenv("NLS_LANG", "AMERICAN_AMERICA.AL32UTF8")

// 注意连接字符串的写法

db, err := sql.Open("oci8", "awsdb/[email protected]:1521/awsdb")

if err != nil {

fmt.Println(err)

return

}

// 事务开启

myTx,err:=db.Begin()

myTx.Commit()

// 查询与结果遍历

rows, err := db.Query("select nodeid,nodename from AA_MT_TEST")

if err != nil {

fmt.Println(err)

return

}

for rows.Next() {

var f1 string

var f2 string

rows.Scan(&f1, &f2)

println(f1, f2) // 3.14 foo

}

rows.Close()

_, err = db.Exec("create table foo(bar varchar2(256))")

_, err = db.Exec("drop table foo")

if err != nil {

fmt.Println(err)

return

}

// 关闭数据库连接

db.Close()

}

2.2、执行了一个存储过程、使用结构保存结果

package main

import (

"database/sql"

_ "github.com/mattn/go-oci8"

"fmt"

"os"

"sync"

)

var (

db  *sql.DB

mux sync.Mutex

)

// 多行字符串的定义

var userTableSql string = `

BEGIN

BEGIN

EXECUTE IMMEDIATE ‘DROP TABLE user_profile‘;

EXCEPTION

WHEN OTHERS THEN

IF SQLCODE != -942 THEN

RAISE;

END IF;

END;

EXECUTE IMMEDIATE ‘CREATE TABLE user_profile (id int PRIMARY KEY, name VARCHAR(20) NOT NULL, created VARCHAR(20) NOT NULL)‘;

END;

`

func init() {

// 锁

mux.Lock()

defer mux.Unlock()

os.Setenv("NLS_LANG", "AMERICAN_AMERICA.ZHS16GBK")

// check

if db != nil {

return

}

// open

oracledb, err := sql.Open("oci8", "awsdb/[email protected]:1521/awsdb")

checkErr(err)

// new db

db = oracledb

// create database table

_, err = db.Exec(userTableSql)

checkErr(err)

}

func checkErr(err error) {

if err != nil {

panic("oracle err:" + err.Error())

}

return

}

func main() {

// insert

insertSql := `insert into user_profile(id,name,created) values(1,‘viney‘,‘2013-03-06‘)`

_, err := db.Exec(insertSql)

checkErr(err)

// update

updateSql := `update user_profile set name=‘中国人‘ where id=1`

_, err = db.Exec(updateSql)

checkErr(err)

// select

querySql := `select * from user_profile where id=1`

rows, err := db.Query(querySql)

type user struct {

id      int // 这个地方改成string才不会报错,但是我创建数据库是int类型

name    string

created string

}

var u = &user{}

for rows.Next() {

err = rows.Scan(

&u.id,

&u.name,

&u.created)

checkErr(err)

}

rows.Close()

fmt.Println(*u)

// delete

deleteSql := `delete from user_profile where id=1`

_, err = db.Exec(deleteSql)

checkErr(err)

db.Close()

}

?

?

GOLANG 在 UBUNTU 14.04 上使用 Oracle 数据库

时间: 2024-10-24 16:19:58

GOLANG 在 UBUNTU 14.04 上使用 Oracle 数据库的相关文章

Ubuntu 14.04 上安装和配置 FTP 服务器 ProFTPD

proftpd的配置方式类似apache,比vsftpd更易用,xampp就集成了proftpd. apt-cache search proftpd 搜索相关包 sudo apt-get install proftpd-basic 安装 安装时默认作为一个standalone server运行proftpd,如果每天的ftp请求量少,可以安装为inetd服务,节省服务器资源. 这里我使用默认值,安装为standalone server. sudo netstat -antp|grep proft

Install golang on Ubuntu 14.04 LTS

1. Install golang on Ubuntu 14.04 LTS a)~$ sudo apt-get install golang                   success b)~$ sudo add-apt-repository ppa:gophers/go ~$ sudo apt-get update ~$ sudo apt-get install golang-stable         fail c) complie from source code        

在Ubuntu 14.04上设置生产环境可用的Node.js

在Ubuntu 14.04上设置生产环境可用的Node.js 提供:ZStack社区 前言 Node.js是一个开源的JavaScript运行时环境,开发者可以用它方便的构建服务器端应用和网络应用.Node.js可在Linux.OS X.FreeBSD和Windows上运行,在其上运行的应用使用JavaScript编写.Node.js应用可以在命令行运行,然而本文的目的在于以服务的方式运行Node.js应用,让这些应用可以在系统重启或遇到错误时自动重启,以配合生产环境的需求. 本文将设置一个可用

在Ubuntu 14.04上搭建github Pages博客

背景 github是一个全球性的代码托管平台,支持github Pages服务.这个服务可以为个人.组织或项目建立静态主页.github为用户提供项目托管.git.pages等用于项目开发的功能.我们使用的就是其pages服务.相对于其他提供免费博客的网站,github的最大优点是无任何广告且提供git版本管理工具对博客进行管理.但劣势是需要一定的命令行操作,对于普通用户有一定门槛.Octopress是一款优秀的静态化博客系统,官方将它简称为:"A blogging framework for

如何利用Heartbeat与Floating IP在Ubuntu 14.04上创建高可用性设置

提供 ZStack社区 内容简介 Heartbeat是一款开源程序,负责将集群基础设施容量--包括集群成员与消息收发--交付至客户服务器.Hearbeat在高可用性服务器基础设施当中扮演着关键性角色.我们通常需要将Heartbeat与Pacemaker等集群资源管理器(简称CRM)相结合,从而实现完整的高可用性设置.不过在今天的教程中,我们将演示如何利用Heartbeat与DigitalOcean Floating IP轻松创建一套双节点高可用性服务器设置. 如果大家希望进一步提升可用性水平,不

在Ubuntu 14.04上部署 PHP 环境及 WordPress

软件及版本选择 Ubuntu 14.04 Ubuntu 是目前用户数量数一数二的发行版,背后有大土豪维护,可以说是轻量级用户的最佳选择.而 14.04 是目前最新的 LTS 版本,目前已经发布了半年了,基本是目前支持最好的版本. Nginx Nginx 是一个轻量级的,配置灵活,擅长并发的 Web 服务器. PHP-FPM PHP-FPM 是目前官方推荐的最佳的运行模式. MariaDB MySQL 的替代品,毕竟目前 MySQL 的创始人已经不建议我们使用 MySQL 了. 基本配置 通常当你

入门系列之在Ubuntu 14.04上备份,还原和迁移MongoDB数据库

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由信姜缘 发表于云+社区专栏 MongoDB是最受欢迎的NoSQL数据库引擎之一.它以可扩展,强大,可靠和易于使用而闻名.在本文中,我们将向您展示如何备份,还原和迁移MongoDB数据库. 导入和导出数据库意味着以人类可读的格式处理数据,与其他软件产品兼容.相反,备份和还原操作创建或使用特定于MongoDB的二进制数据,这不仅保留了数据的一致性和完整性,还保留了其特定的MongoDB属性.因此,对于迁移,只要源系统和目标系统兼容,通

在Ubuntu 14.04 上安装网易云音乐

之前因为电脑有网络的原因,一直使用网页网易云音乐听歌,最近电脑没网络使用,才发现网易云音乐有linux版本,果断下载. 在Chrome浏览器中,登陆官网下载Linux版本中的Ubuntu 14.04 64bit的deb包 http://music.163.com/#/download 下载完成后,双击该deb包即可自动安装 安装完成的画面 成功!

ubuntu 14.04 上安装有道词典

Ubuntu 14.04用户在安装前要更新系统,即update&dist-upgrade. 下载地址:32/64bits http://codown.youdao.com/cidian/linux/youdao-dict_1.0.2~ubuntu_i386.deb http://codown.youdao.com/cidian/linux/youdao-dict_1.0.2~ubuntu_amd64.deb 安装 有道界面跟window ui一样 屏幕取词挺好的