【Go语言】连接数据库SQLite、MySQL、Oracle
说明: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的更多相关文章
- springboot+mybatis+druid+sqlite/mysql/oracle
搭建springboot+mybatis+druid+sqlite/mysql/oracle附带测试 1.版本 springboot2.1.6 jdk1.8 2.最简springboot环境 http ...
- Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决
Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决 I. 概述 1.1 JDBC概念 JDBC(Java Database Connectivity ...
- sql server 导出的datetime结果 CAST(0x00009E0E0095524F AS DateTime) 如何向mysql,oracle等数据库进行转换
1. 处理 sql server 导出的 datetime 类型的字段 在进行sql server向mysql等其他数据进行迁移数据时,会发现使用sql server导出的datetime类型的结果是 ...
- 数据库管理工具神器-DataGrip,可同时管理多个主流数据库[SQL Server,MySQL,Oracle等]连接
前言 DataGrip:Jet Brains出品的一款数据库管理工具(没错,是Jet Brains出品,必属精品).DataGrip整合集成了当前主流数据库(如:SQL Server, MySQL, ...
- atitit.跨语言实现备份mysql数据库 为sql文件特性 api 兼容性java c#.net php js
atitit.跨语言实现备份mysql数据库 为sql文件特性 api 兼容性java c#.net php js 1. 两个方法:: bat vs mysqldump(推荐) vs lang ...
- Python操作SQLite/MySQL/LMDB
1.概述 1.1前言 最近在存储字模图像集的时候,需要学习LMDB,趁此机会复习了SQLite和MySQL的使用,一起整理在此. 1.2环境 使用win7,Python 3.5.2. 2.SQLite ...
- 24、jQuery常用AJAX-API/Java调用MySQL / Oracle过程与函数
1)掌握jQuery常用AJAX-API 2)掌握Java调用MySQL / Oracle过程与函数 一)jQuery常用AJAX-API 目的:简化客户端与服务端进行局部刷新的异步通讯 (1)取 ...
- Mysql,Oracle,Java数据类型对应
Mysql Oracle Java BIGINT NUMBER(19,0) java.lang.Long BIT RAW byte[] BLOB BLOB RAW byte[] CHAR CHAR j ...
- 异常 SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
使用Spring 的JDBCtemplate 调用数据库的时候 出现了如下的问题 SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-S ...
随机推荐
- wp8 入门到精通 ---转换
/// <summary> /// 颜色字符串转Color /// </summary> public static ...
- QQ互联OAuth
/** * QQ互联 oauth * @author dyllen * */ class Oauth { //取Authorization Code Url const PC_CODE_URL = ' ...
- ImageSwitcher自定意效果+定时切换图片
Activity实现 1 import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; ...
- 最实用的APP界面设计知识,有温度的APP设计(转)
在逛简书的时候,无意之间看到了这样的一篇非常有意思的app设计博文.顾25学堂的摘录了其中的一些关于移动端APP界面设计的精华.分享给25学堂的app设计师们. 当然,下面的这些app设计知识点是来自 ...
- MySQL模糊查询:LIKE模式和REGEXP模式
MySQL模糊查询提供了两种模式:LIKE模式和REGEXP模式. LIKE模式 LIKE模式是使用的LIKE 或 NOT LIKE 比较运算符进行模糊查询. SELECT 字段 FROM 表 WHE ...
- 如何在Ubuntu中让mongo远程可连接
最近团队的一个成员由于项目原因需要在vps上建立mongo数据库服务器并允许远端访问,这里整理下设置的思路 首先需要安装mongo apt-get updateapt-get install mong ...
- ios 距离传感器和摇一摇
//距离传感器,以注册通知的形式来实现的 #import "ViewController.h" @interface ViewController () @end @impleme ...
- 学习linux内核时常碰到的汇编指令(2)
转载:http://blog.sina.com.cn/s/blog_4be6adec01007xvh.html JNGE∶指令助记符——(有符号数比较)不大于且不等于转移(等价于JL).当SF和OF异 ...
- 【架构】MVP模型
MVP模型一般要创建三个文件夹:View.Interactor(Model).Presenter 每个部分都有其接口和实现类,就是为了方便回调 这里做一个登陆界面为例子: 接口: Interactor ...
- Sublime text追踪函数插件:ctags
转自:http://blog.csdn.net/xxhsu/article/details/30766675 一.下载: 1)http://ctags.sourceforge.net/ 2)http: ...