說明: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}]