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

【Go语言】连接数据库SQLite、MySQL、Oracle的更多相关文章

  1. springboot+mybatis+druid+sqlite/mysql/oracle

    搭建springboot+mybatis+druid+sqlite/mysql/oracle附带测试 1.版本 springboot2.1.6 jdk1.8 2.最简springboot环境 http ...

  2. Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决

    Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决 I. 概述 1.1 JDBC概念 JDBC(Java Database Connectivity ...

  3. sql server 导出的datetime结果 CAST(0x00009E0E0095524F AS DateTime) 如何向mysql,oracle等数据库进行转换

    1. 处理 sql server 导出的 datetime 类型的字段 在进行sql server向mysql等其他数据进行迁移数据时,会发现使用sql server导出的datetime类型的结果是 ...

  4. 数据库管理工具神器-DataGrip,可同时管理多个主流数据库[SQL Server,MySQL,Oracle等]连接

    前言 DataGrip:Jet Brains出品的一款数据库管理工具(没错,是Jet Brains出品,必属精品).DataGrip整合集成了当前主流数据库(如:SQL Server, MySQL, ...

  5. atitit.跨语言实现备份mysql数据库 为sql文件特性 api 兼容性java c#.net php js

    atitit.跨语言实现备份mysql数据库 为sql文件特性 api 兼容性java c#.net php js 1. 两个方法:: bat vs mysqldump(推荐)  vs   lang  ...

  6. Python操作SQLite/MySQL/LMDB

    1.概述 1.1前言 最近在存储字模图像集的时候,需要学习LMDB,趁此机会复习了SQLite和MySQL的使用,一起整理在此. 1.2环境 使用win7,Python 3.5.2. 2.SQLite ...

  7. 24、jQuery常用AJAX-API/Java调用MySQL / Oracle过程与函数

      1)掌握jQuery常用AJAX-API 2)掌握Java调用MySQL / Oracle过程与函数 一)jQuery常用AJAX-API 目的:简化客户端与服务端进行局部刷新的异步通讯 (1)取 ...

  8. Mysql,Oracle,Java数据类型对应

    Mysql Oracle Java BIGINT NUMBER(19,0) java.lang.Long BIT RAW byte[] BLOB BLOB RAW byte[] CHAR CHAR j ...

  9. 异常 SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]

    使用Spring 的JDBCtemplate 调用数据库的时候 出现了如下的问题 SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-S ...

随机推荐

  1. android 入门-android Studio 解决方案

    一.当提示 解决方案: 1. 2. 二.从这步到这步 的时候,可能遇见下面的问题. 解决方案: 更新一下build-tools 19.1.0版本 放到你的sdk里并重启as. 三. 当遇见这样的情况 ...

  2. WPF 创建自定义窗体

    在前面的一篇博客"WPF 自定义Metro Style窗体",展示了如何创建一个类似于Metro Style的Window,并在程序中使用.但是这个窗体不能够自由的改变大小.今天的 ...

  3. Android开发的教程和资源

    Android 设计指南非官方简体中文版 http://www.apkbus.com/design/index.html NDK下载 http://developer.android.com/tool ...

  4. 安卓图表引擎AChartEngine(一) - 简介

    AChartEngine 是一个安卓系统上制作图表的框架,目前它支持如下的图表类型: line chart (折线图) area chart (面积图:分区图,对比图) scatter chart ( ...

  5. 解决ScrollView嵌到listView冲突问题

    方法一: 把下面的方法放在绑定适配器操作的下面就行. /** * 重新计算ListView的高度,解决ScrollView和ListView两个View都有滚动的效果,在嵌套使用时起冲突的问题 * @ ...

  6. 通俗理解T检验与F检验的区别【转】

    转自:http://blog.sina.com.cn/s/blog_4ee13c2c01016div.html1,T检验和F检验的由来一般而言,为了确定从样本(sample)统计结果推论至总体时所犯错 ...

  7. 2.2 代码块--delphi 写日志模块

    //2.2 代码块--写日志 //调用例句如:LogMsg('FTP上传线程终止',False,true); procedure LogMsg(AMsg: string; const blnIsErr ...

  8. MFC CPen CBrush CFont

    在OnDraw函数内定义后使用 使用时,要pDC->SelectObject(),如pDC->SelectObject(font); CPen://draw line Pen.Create ...

  9. JS扩展方法——字符串trim()

    转自:http://www.cnblogs.com/kissdodog/p/3386480.html <head> <title>测试JS扩展方法</title> ...

  10. fill_parent 和 match_parent区别

    之前一直没有区别好 fill_parent 和 match_parent, 其实,在 api 8 以后,两者的作用几乎一样,都是填充控件 在这里延伸到android 的版本变化导致方法的变化问题 我对 ...