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() //提交

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM