go sqlite mysql_Golang连接SQLite、MySQL、ORacle

郭皓
2023-12-01

说明:go语言连接数据库不像JAVA那么方便,本文分别介绍了连接三种典型数据库的驱动以及连接方式:小型:SQLite;中型:MySQL;大型:Orace.

安装问题:

1.32 位 windows 的安装

1_1.安装 sqlite3。到 http://www.sqlite.org/download.html 的页面中,找到 sqlite-dll-win32-x86-3071700.zip 下载解压,并把里面的 dll 文件复制到 windows/system32 目录下。

1_2.下载 gcc 编译器。到 http://tdm-gcc.tdragon.net/download,下载 tdm-gcc-4.7.1-2。如果是 64 位的 win,下载 tdm64-gcc-4.7.1-3。运行这个 exe 文件,安装好 gcc 编译器。

运行命令:go get github.com/mattn/go-sqlite3 ,安装 go 的 sqlite3 的驱动等。

2.64 位 windows 的安装

2_1.下载 gcc 编译器。到 http://tdm-gcc.tdragon.net/download,下载 tdm64-gcc-4.7.1-3。运行这个 exe 文件,安装好 gcc 编译器。

2_2.运行命令:go get github.com/mattn/go-sqlite3 ,安装 go 的 sqlite3 的驱动等。

数据库操作:

1.Go连接SQLite

1_1.SQLite推荐驱动

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推荐驱动

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 才管用

如果这个地址不好使,可以再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)

注意先不要把这些源码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}]

参考:

作者: lengyuezuixue

链接: https://blog.csdn.net/lengyuezuixue/article/details/78581532

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

到此这篇关于“Golang连接SQLite、MySQL、ORacle”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持Go语言编程网!

相关文章:

 类似资料: