【Go語言】連接數據庫SQLite、MySQL、Oracle


說明:go語言連接數據庫不像Java那么方便,本文分別介紹了連接三種典型的數據庫的驅動以及連接方法:小型,SQLite;中型,MySQL;大型,Oracle.

1.Go連接SQLite

1_1.SQLite推薦驅動

https://github.com/mattn/go-sqlite3

1_2.SQLite連接示例代碼

示例代碼如下:

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/mattn/go-sqlite3"
    "log"
    "os"
)

type Users struct {
    UserId int
    Uname  string
}

func main() {
    os.Remove("./foo.db")

    db, err := sql.Open("sqlite3", "./foo.db")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    sql := `create table users (userId integer, uname text);`
    db.Exec(sql)
    sql = `insert into users(userId,uname) values(1,'Mike');`
    db.Exec(sql)
    sql = `insert into users(userId,uname) values(2,'John');`
    db.Exec(sql)
    rows, err := db.Query("select * from users")
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()
    var users []Users = make([]Users, 0)
    for rows.Next() {
        var u Users
        rows.Scan(&u.UserId, &u.Uname)
        users = append(users, u)
    }
    fmt.Println(users)
}

執行結果為:

[{1 Mike} {2 John}]
同時在當前目錄生成foo.db

2.Go連接MySQL

2_1.MySQL推薦驅動

https://github.com/Go-SQL-Driver/MySQL

2_2.MySQL連接示例代碼

示例代碼如下:

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

type Users struct {
    UserId int
    Uname  string
}

func main() {
    //db, err := sql.Open("mysql", "user:password@/dbname")
    db, err := sql.Open("mysql", "root:root@/test")
    if err != nil {
        fmt.Println("連接數據庫失敗")
    }
    defer db.Close()
    var users []Users = make([]Users, 0)
    sqlStr := "select * from users"
    rows, err := db.Query(sqlStr)
    if err != nil {
        fmt.Println(err)
    } else {
        for i := 0; rows.Next(); i++ {
            var u Users
            rows.Scan(&u.UserId, &u.Uname)
            users = append(users, u)
        }
        fmt.Println(users)
    }
}

執行結果為:

[{1 Mike} {2 John}]

3.Go連接Oracle

3_1.Oracle推薦驅動以及准備事項

	本人的數據庫相關配置是 版本11.2.0.1.0
	Go版本是1.2
	系統是WIN7旗艦版64位
	按照下面的步驟最終連接上了oracle
①首先是先在機子上安裝git(這是必須的吧 作為go開發者)
②下載最新版的OCI盡管我用的是11.2的版本,但是試了n次才返現只有最新的12.1.0.1.0 才管用
	下載地址是http://www.oracle.com/technetwork/cn/database/winx64soft-089540.html
	如果這個地址不好使,可以再baidu是搜Instant Client Downloads for Microsoft Windows (x64)
	需要下載instantclient-basic和instantclient-sdk兩個zip文件
	下載后將兩個包解壓,然后將sdk中的文件sdk文件夾放到instantclient_12_1下,形成instantclient_12_1/sdk目錄級
	然后將instantclient_12_1文件夾改名為instantclient_11_2並放到了C盤的跟目錄下
③下載MinGW最新版(實際上我用的不是最新的  用的是這個版本x86_64-4.9.0-posix-seh-rt_v3-rev2)
④到https://github.com/wendal/go-oci8下載pkg-config.exe和oci8.pc
	注意先不要把這些源碼git到計算機上,只是先下載pkg-config.exe和oci8.pc(在windows目錄下)
	下載后進行以下操作
	將pkg-config.exe復制到mingw\bin\下 
	將oci8.pc復制到mingw\lib\pkg-config\下(我的pkg-config是新建的因為原來沒有)
	注意,oci8.pc 需要根據你下載的 oci進行修改。下面是我根據我下載的oci版本做的修改。
	# Package Information for pkg-config

	prefix=C:/instantclient_11_2
	exec_prefix=C:/instantclient_11_2
	libdir=${exec_prefix}
	includedir=${prefix}/sdk/include/

	Name: OCI
	Description: Oracle database engine
	Version: 11.2
	Libs: -L${libdir} -loci
	Libs.private: 
	Cflags: -I${includedir}
⑤修改系統環境變量,
	添加 
	PATH=原有PATH;C:\instantclient_11_2;D:\MinGW\bin; (讀者根據自己的目錄變換一下)
	PKG_CONFIG_PATH=D:\MinGW\lib\pkg-config(讀者根據自己的目錄變換一下)
⑥下載源碼.
	把https://github.com/wendal/go-oci8源碼git到本地(這是go-oci庫 也就是連接oracle的驅動)
	go get github.com/wendal/go-oci8
	然后執行測試一下吧

3_2.Oracle連接示例代碼

示例代碼如下:

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/wendal/go-oci8"
    "log"
)

type Users struct {
    UserId int
    Uname  string
}

func main() {
    log.Println("Oracle Driver Connecting....")
    //用戶名/密碼@實例名 如system/123456@orcl、sys/123456@orcl
    db, err := sql.Open("oci8", "BOOKMAN/password@orcl")
    if err != nil {
        log.Fatal(err)
        panic("數據庫連接失敗")
    } else {
        defer db.Close()
        var users []Users = make([]Users, 0)
        rows, err := db.Query("select * from users")
        if err != nil {
            log.Fatal(err)
        } else {
            for rows.Next() {
                var u Users
                rows.Scan(&u.UserId, &u.Uname)
                users = append(users, u)
            }
            fmt.Println(users)
            defer rows.Close()
        }

    }

}

執行過程比mysql和sqlite比起來非常緩慢,結果如下

2014/07/08 01:14:05 Oracle Driver Connecting....
[{1 Mike} {2 john}]


免責聲明!

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



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