【Go語言】串連資料庫SQLite、MySQL、Oracle

來源:互聯網
上載者:User

標籤:des   style   blog   http   java   color   os   strong   

本文目錄
  • 1.Go串連SQLite
    • 1_1.SQLite推薦驅動
    • 1_2.SQLite串連範例程式碼
  • 2.Go串連MySQL
    • 2_1.MySQL推薦驅動
    • 2_2.MySQL串連範例程式碼
  • 3.Go串連Oracle
    • 3_1.Oracle推薦驅動以及準備事項
    • 3_2.Oracle串連範例程式碼

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

-1.Go串連SQLite1.Go串連SQLite回到頂部1_1.SQLite推薦驅動

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

回到頂部1_2.SQLite串連範例程式碼

範例程式碼如下:

package mainimport (    "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串連MySQL2.Go串連MySQL回到頂部2_1.MySQL推薦驅動

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

回到頂部2_2.MySQL串連範例程式碼

範例程式碼如下:

package mainimport (    "database/sql"    "fmt"    _ "github.com/go-sql-driver/mysql")type Users struct {    UserId int    Uname  string}func main() {    //db, err := sql.Open("mysql", "user:[email protected]/dbname")    db, err := sql.Open("mysql", "root:[email protected]/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串連Oracle3.Go串連Oracle回到頂部3_1.Oracle推薦驅動以及準備事項
本人的資料庫相關配置是 版本11.2.0.1.0Go版本是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-configprefix=C:/instantclient_11_2exec_prefix=C:/instantclient_11_2libdir=${exec_prefix}includedir=${prefix}/sdk/include/Name: OCIDescription: Oracle database engineVersion: 11.2Libs: -L${libdir} -lociLibs.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 mainimport (    "database/sql"    "fmt"    _ "github.com/wendal/go-oci8"    "log")type Users struct {    UserId int    Uname  string}func main() {    log.Println("Oracle Driver Connecting....")    //使用者名稱/密碼@執行個體名 如system/[email protected]、sys/[email protected]    db, err := sql.Open("oci8", "BOOKMAN/[email protected]")    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}]
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.