go连接oracle数据库操作(godror)

注入数据库驱动 github.com/godror/godror

 

安装过程:

首先在 $GOPATH/src 下新建目录golang.org/x/,然后再cd到x下执行git clone https://github.com/golang/xerrors.git

完成后就可以执行go get github.com/godror/godror,等待一段时间就好了。

 

 

连接

package main

import (
    "database/sql"
    "fmt"

    _ "github.com/godror/godror"
)

var db *sql.DB

//数据库配置
const (
    host        = "localhost"
    port        = 1521
    user        = "username"
    sqlpassword = "password"
    dbname      = "orcl"
)

func initsql() {
    // 用户名/密码@IP:端口/实例名
    osqlInfo := fmt.Sprintf("%s/%s@%s:%d/%s", user, sqlpassword, host, port, dbname)
    DB, err := sql.Open("godror", osqlInfo)
    if err != nil {
        panic(err)
    }
    err = DB.Ping()
    if err != nil {
        panic(err)
    }
    db = DB
}

func main() {
    initsql()
    defer db.Close()
}

 

增删查改

oracle的占位符是“:name”

func (db *DB) Exec(query string, args ...interface{}) (Result, error) //增删改
func (s *Stmt) Query(args ...interface{}) (*Rows, error)//

 

//增加
    sqlStatement := "INSERT INTO XXXTABLE(X1, X2, X3) VALUES (:x1, :x1, :x3)"
    stmt, err := db.Prepare(sqlStatement)
    defer stmt.Close()
    if err != nil {
        panic(err)
    }
    _, err = stmt.Exec(x1, x2, x3)
    if err != nil {
        panic(err)
    }

//删除
    sqlStatement := "DELETE FROM XXXTABLE WHERE X1=:x1"
    stmt, err := db.Prepare(sqlStatement)
    defer stmt.Close()
    if err != nil {
        panic(err)
    }
    _, err = stmt.Exec(x1)
    if err != nil {
        panic(err)
    }

 

//更改
    sqlStatement := "UPDATE XXXTABLE SET X1=:x1 WHERE X2=:x2"
    stmt, err := db.Prepare(sqlStatement)
    defer stmt.Close()
    if err != nil {
        panic(err)
    }
    _, err = stmt.Exec(x1, x2)
    if err != nil {
        panic(err)
    }

 

    //查找
    sqlStatement := "SELECT X2,X3 FROM XXXTABLE WHERE X1=:x1"
    stmt, err := db.Prepare(sqlStatement)
    defer stmt.Close()
    if err != nil {
        panic(err)
    }
    rows, err := stmt.Query(x1)
    defer rows.Close()
    if err != nil {
        panic(err)
    }
    for rows.Next() {
        rows.Scan(&x2, &x3)
    }

 

 

事务

func (db *DB) Begin() (*Tx, error) 

 

使用这个函数开启一个事务,返回事务对象Tx

Tx代表一个进行中的数据库事务。
一次事务必须以对Commit或Rollback的调用结束。
调用Commit或Rollback后,所有对事务的操作都会失败并返回错误值ErrTxDone。
Tx 同样拥有 exec,query,queryRow方法,同时增加了提交事务和回滚事务的方法:
func (tx *Tx) Commit() error Commit递交事务。
func (tx *Tx) Rollback() error Rollback放弃并回滚事务。
 
简单演示
    //开启事务tx,若后续任何操作有出错,则回滚
    tx, err := db.Begin()
    if err != nil {
        panic(err)
    }
    sqlStatement := "UPDATE XXXTABLE SET X1=:x1 WHERE X2=:x2"
    stmt, err := tx.Prepare(sqlStatement)
    defer stmt.Close()
    if err != nil {
        tx.Rollback() //回滚
        panic(err)
    }
    _, err = stmt.Exec(x1, x2)
    if err != nil {
        tx.Rollback() //回滚
        panic(err)
    }
    tx.Commit() //提交

 

posted @ 2020-06-18 01:25  悲惨痛苦太刀  阅读(6815)  评论(1编辑  收藏  举报