【Go语言】连接数据库SQLite、MySQL、Oracle
来源:互联网 发布:手机维修店刷机软件 编辑:程序博客网 时间:2024/05/17 02:44
本文目录
说明: go语言连接数据库不像Java那么方便,本文分别介绍了连接三种典型的数据库的驱动以及连接方法:小型,SQLite;中型,MySQL;大型,Oracle.
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 intUname 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 Usersrows.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 intUname 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 Usersrows.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.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 intUname string}func main() {log.Println("Oracle Driver Connecting....")//用户名/密码@实例名 如system/123456@orcl、sys/123456@orcldb, 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 Usersrows.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}]
0 0
- 【Go语言】连接数据库SQLite、MySQL、Oracle
- go语言连接mysql数据库 go语言网络库搭建
- Golang连接SQLite、MySQL、Oracle数据库
- go 连接 mysql 数据库
- go连接mysql数据库
- go连接mysql数据库
- go语言连接mysql数据库的个人理解
- go语言连接本地数据库
- Go语言中使用SQLite数据库
- 使用GO连接MYSQL数据库
- go语言访问mysql数据库
- Golang连接SQLite、MySQL、ORacle
- go 语言 连接mysql(简单实例)
- 连接数据库Oracle,MySQL
- Go实战--go语言操作sqlite数据库(The way to go)
- go语言 windows下 访问oracle数据库
- 21.笔记go语言——SQLite数据库使用
- java语言Oracle、SQLServer、MySQL数据库的连接方法
- ASP.NET中 RegularExpressValidator(正则验证)的使用
- 数位dp+矩阵乘法 【bzoj3329】Xorequ
- Epoll详解及源码分析
- ASP.NET中 CompareValidator(比较验证)的使用
- 使用 Servlet 作为控制器,标准MVC模式
- 【Go语言】连接数据库SQLite、MySQL、Oracle
- 贪心Greedy
- rs.getTimestamp和pstmt.setTimestamp
- eclipse创建Hibernate Demo中需要注意的地方
- (转)SQLite3 多线程访问
- 4-18 递归求Fabonacci数列 (10分)
- java.sql.SQLException: 无效的列类型: 1111
- French Word
- 插件介绍:轻量级表格树treegrid, 支持bootstrap 风格