linux+go+连接oracle,Golang 在 Ubuntu 14.04 上使用 Oracle 数据库

二、使用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/awsdb@192.168.0.126: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/awsdb@192.168.0.126: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()

}

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值