首页 > 代码库 > 【Go语言】连接数据库SQLite、MySQL、Oracle

【Go语言】连接数据库SQLite、MySQL、Oracle

本文目录
  • 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连接SQLite

1.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连接MySQL

2.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: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.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 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/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}]