GO连接Mysql,Oracle

这里使用官方包databse/sql也可使用其他二次封装包,例如:github.com/jmoiron/sqlx

连接
package utilities

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	_ "github.com/godror/godror"
)

var db *sql.DB
type connect struct {
	HOST string
	PORT string
	DATABASE string
	USERNAME string
	PASSWORD string
	CHARSET string
	PARSETIME string
	SID string
}

func Mysql()(baseDB *sql.DB, err error)  {
	mysql := connect{
		HOST:     "localhost",
		PORT:     "3306",
		DATABASE: "dream",
		USERNAME: "root",
		PASSWORD: "root",
		CHARSET: "utf8mb4",
		PARSETIME: "True",
	}
	driver := mysql.USERNAME+":"+mysql.PASSWORD+"@"+"tcp("+mysql.HOST+":"+mysql.PORT+")/"+mysql.DATABASE+"?charset="+mysql.CHARSET
	if mysql.PARSETIME != "" {
		driver += "&parseTime="+mysql.PARSETIME
	}
	db, err = sql.Open("mysql",driver)
	if err != nil {
		fmt.Printf("connect DB failed, err:%v\n", err)
		return
	}
	db.SetMaxOpenConns(20)
	db.SetMaxIdleConns(10)
	return db,nil
}
func Oracle()(baseDB *sql.DB, err error){
	oracle := connect{
		HOST:      "localhost",
		PORT:      "1521",
		USERNAME:  "root",
		PASSWORD:  "root",
		SID: 	   "orcl",
	}
	db, err := sql.Open("godror",`user="`+oracle.USERNAME+`" password="`+oracle.PASSWORD+`" connectString="`+oracle.HOST+`:`+oracle.PORT+`/`+oracle.SID+`"`)
	if err != nil {
		fmt.Printf("connect DB failed, err:%v\n", err)
		return
	}
	db.SetMaxOpenConns(20)
	db.SetMaxIdleConns(10)
	return db,nil
}

声明一个connect结构体来存储连接属性,声明一个db指针指向连接
Mysql: 不要忘记引入mysql驱动

Oracle 官方包比较麻烦,我使用第三方包:godror做驱动包,Oracle连接三步骤:

一.Win下建立新版GCC

windows下需要安装一个新版的gcc,谷歌MinGW下载自己的对应版本(32,64),有两种下载方式,安装包与压缩包,因被墙下载过慢我把下载好的8.1版本gcc放到网盘上

链接:https://pan.baidu.com/s/1X-yRygLtHfgPTTBbyLNDTQ 提取码:c80z

解压后进入bin目录将该路径配置到环境变量上,打开cmd,输入 gcc -v查看是否成功:
在这里插入图片描述

二. 安装oracle即时客户端

我连接远程oracle,不需要本地客户端,下载一个简易客户端连接包:Instant Client(https://oracle.github.io/odpi/doc/installation.html) ,同样是解压包,按官方提示解压后配进环境变量。

三. 引入驱动

重启GO编辑器,go get github.com/godror/godror下载godror驱动,尝试连接

import引入驱动:_ "github.com/godror/godror"
连接:

db, err := sql.Open("godror", `user="scott" password="tiger" connectString="dbhost:1521/orclpdb1"`)

----------------------------------------------------

处理sql结果集
package orm

import (
	"utilities"
	"database/sql"
	"fmt"
)

func query(sqlStr string,db *sql.DB)(list []map[string]string) {
	rows,_ := db.Query(sqlStr)
	//字段名称
	columns, _ := rows.Columns()
	//多少个字段
	length := len(columns)
	//每一行字段的值
	values := make([]sql.RawBytes, length)
	//保存的是values的内存地址
	pointer := make([]interface{}, length)
	//
	for i := 0; i < length; i++ {
		pointer[i] = &values[i]
	}
	//
	for rows.Next() {
		//把参数展开,把每一行的值存到指定的内存地址去,循环覆盖,values也就跟着被赋值了
		err := rows.Scan(pointer...)
		if err != nil {
			fmt.Println(err)
			return
		}
		//每一行
		row := make(map[string]string)
		for i := 0; i < length; i++ {
			row[columns[i]] = string(values[i])
		}
		list = append(list, row)
	}
	_ = rows.Close()
	return
}
func GetMysqlData(sqlStr string)(list []map[string]string) {
	db, err := utilities.Mysql()
	if err != nil {
		fmt.Println(err)
		return
	}
	return query(sqlStr, db)
}
func GetOracleData(sqlStr string)(list []map[string]string) {
	db, err := utilities.Oracle()
	if err != nil {
		fmt.Println(err)
		return
	}
	return query(sqlStr, db)
}

将结果集转换为map类型的切片,分别指定Oracle与Mysql的连接返回,如想要转换为结构体 可使用github.com/jmoiron/sqlx包,注意此处的utilities包是我的自定义包,内部方法为上方的连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值