【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 入门到精通 定时更新瓷贴
public class ScheduledAgent : ScheduledTaskAgent { static ScheduledAgent() { Deployment.Current.Disp ...
- loj 1337
题目链接:http://lightoj.com/volume_showproblem.php?problem=1337 思路:对于搜过的区域进行标记,如果要求的点落在已经搜过的区域,那么直接取出来即可 ...
- windowsapi
内核相关的在:kernel.dll,提供内存管理.进程管理.进程调度.线程管理等等用户相关的在:user32.dll,提供执行用户界面相关的接口界面相关的在:gdi32.dll,提供画图相关的接口
- android之SharedPreferes
Android应用开发SharedPreferences存储数据的使用方法 SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的 ...
- 定时备份mysql
@echo offset filename=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%mysqldump -- ...
- 【转】CDH5.x升级
http://www.cloudera.com/content/www/zh-CN/documentation/enterprise/5-3-x/topics/cm_ag_upgrade_cm5.ht ...
- 2016.8.16 JQuery学习记录
1.$(document).ready(function(){}); 这个函数会在浏览器加载完页面之后,尽快执行: 2.所有的JQuery函数用有个$开始表示,All jQuery functions ...
- BZOJ 2565 回文串-Manacher
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2565 题意:中文题 思路:定义L[i],R[i].表示以i为左端点/右端点时,最长回文串长 ...
- Codeforces Round #355 (Div. 2)-C
C. Vanya and Label 题目链接:http://codeforces.com/contest/677/problem/C While walking down the street Va ...
- Codeforces Round #354 (Div. 2)-D
D. Theseus and labyrinth 题目链接:http://codeforces.com/contest/676/problem/D Theseus has just arrived t ...