Golang连接SQLite、MySQL、ORacle
来源:互联网 发布:mac的话筒在哪 编辑:程序博客网 时间:2024/06/04 19:23
说明: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推荐驱动
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_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_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}]
参考:
https://my.oschina.net/tomlin/blog/155429
https://item.congci.com/-/content/golang-lianjie-sqlite-mysql-oracle-shujuku
http://blog.csdn.net/weiyuefei/article/details/77197567
https://github.com/mattn/go-sqlite3/issues/27
- Golang连接SQLite、MySQL、ORacle
- Golang连接SQLite、MySQL、Oracle数据库
- 【Go语言】连接数据库SQLite、MySQL、Oracle
- Golang连接Oracle
- GoLang 连接 Mysql 数据库
- golang连接mysql
- Golang 连接mysql
- golang连接mysql数据库
- golang 连接mysql数据库
- golang 连接mysql
- GoLang 连接MySQL 实现查询
- Golang 连接MySql数据库使用方法
- golang 连接mysql 参数备忘
- Java JDBC建立和Mysql、sql server 2005、sqlite和Oracle数据库的连接
- 2、Java应用中常见的JDBC连接字符串(SQLite、MySQL、Oracle、Sybase、SQLServer、DB2)
- golang连接mysql操作及动态连接池设置
- ubuntu golang使用sqlite
- golang使用sqlite
- clk_get_rate函数
- Java三目运算符
- leetcode: 73. Set Matrix Zeroes
- 数据库索引是怎样工作的?
- Redis & Hash
- Golang连接SQLite、MySQL、ORacle
- studio 3.0版本使用ButterKnife
- leetcode: 74. Search a 2D Matrix
- 提高JavaScript性能②
- 机器学习面试系列一
- wamp报错总结
- 第五大周感想
- 使用ssh工具调用图形界面
- thinkphp5中__PUBLIC__的使用