Golang连贯Oracle 须要装置Oracle Full Client或Instant Client 驱动程序

Linux装置Golang Oracle数据库驱动程序

MacBook装置Golang Oracle数据库驱动程序

形式一

应用go get github.com/mattn/go-oci8

在GoPath的src目录下创立oracleoci8.go,内容如下:

package mainimport (    "database/sql"    "fmt"    _ "github.com/mattn/go-oci8"    "log"    "os")func main() {    if len(os.Args) != 2 {        log.Fatalln(os.Args[0] + " user/password@host:port/sid")    }    fmt.Println(os.Args[1])    db, err := sql.Open("oci8", os.Args[1])    if err != nil {        log.Fatalln(err)    }    defer db.Close()    //查问用户    rows, err := db.Query("select user from dual")    if err != nil {        log.Fatalln(err)    }    defer rows.Close()    for rows.Next() {        var data string        rows.Scan(&data)        fmt.Println(data)    }    if err = rows.Err(); err != nil {        log.Fatalln(err)    }    //查问ZHUJI表的code字段    rows2, err := db.Query("SELECT code FROM ZHUJI")    if err != nil {        log.Fatalln(err)    }    defer rows2.Close()    for rows2.Next() {        var data string        rows2.Scan(&data)        fmt.Println(data)    }    if err = rows2.Err(); err != nil {        log.Fatalln(err)    }}

运行

#间接运行go run oracleoci8.go liang/liang@192.168.0.4:1521/orcl#或者先编译成二进制,在运行二进制文件go build oracleoci8.go./oracleoci8 liang/liang@192.168.0.4:1521/orcl

形式二

应用go get github.com/godror/godror

在GoPath的src目录下创立oracledror.go,内容如下:

package mainimport (    "database/sql"    "encoding/json"    "fmt"    _ "github.com/godror/godror")func main() {    db, err := sql.Open("godror", `user="liang" password="liang" connectString="192.168.0.4:1521/orcl"`)    if err != nil {        panic(err)    }    err = db.Ping()    if err != nil {        panic(err)    }    //查问ZHUJI表中code='pt'的sql:SELECT * FROM ZHUJI where CODE = 'pt'    sqlStatement := "SELECT * FROM ZHUJI where CODE = :1"    stmt, err := db.Prepare(sqlStatement)    defer stmt.Close()    if err != nil {        panic(err)    }    rows, err := stmt.Query("pt") //输出sql中对应参数的值    if err != nil {        panic(err)    }    defer rows.Close() //defer敞开查问连贯    //获取列相干信息    strings, _ := rows.Columns()    for i := 0; i < len(strings); i++ {        fmt.Print(" ", strings[i])    }    fmt.Print("\n")    //结构切片存储json    var slice []map[string]interface{}    var m1 map[string]interface{}    m1 = make(map[string]interface{})    var CODE, OVALUE1, OVALUE2 string    for rows.Next() {        rows.Scan(&CODE, &OVALUE1, &OVALUE2) //写入查问数据集的所有列名称        fmt.Printf("code is %s, OVALUE1 is %s\n", CODE, OVALUE1)        m1["CODE"] = CODE        m1["OVALUE1"] = OVALUE1        m1["OVALUE2"] = OVALUE2        slice = append(slice, m1) //分片中追加信息    }    if err = rows.Err(); err != nil {        // handle the error here    }    defer stmt.Close()    data, err := json.Marshal(slice)    if err != nil {        fmt.Printf("序列化谬误 err = %v\n", err)    }    //输入序列化后的后果 json字符串    fmt.Printf("序列化后 = %v\n", string(data))}

运行

#间接运行go run oracledror.go#或者先编译成二进制,在运行二进制文件go build oracledror.go./oracledror