调用mysql

本文详细介绍了如何在Go语言环境中连接和操作MySQL数据库,包括建立连接、执行SQL语句和处理查询结果等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql

package db

import (
	"config"
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"logger"
	"strconv"
	"time"
)

// ==========================
// Admin Vvooooooooooo
// Time  2020/1/8
// Explain
// ==========================


var Db *sql.DB

func init()  {
	dsn := fmt.Sprintf("%s:%s@%s(%s:%d)/%s?charset=utf8",config.Serverconfig.User,config.Serverconfig.Password,config.Serverconfig.DBNetwork,config.Serverconfig.Sqlip,config.Serverconfig.Port,config.Serverconfig.Dataname)
	var err error
	db, err := sql.Open("mysql", dsn)
	//config.Serverconfig.User+":"+config.Serverconfig.Password+"@tcp("+config.Serverconfig.Sqlip+":"+config.Serverconfig.Port+")/"+config.Serverconfig.Dataname+"?charset=utf8"
	//"qijue:qijue@tcp(192.168.77.20:3306)/wxmh5?charset=utf8" )
	if err!=nil {
		logger.Error("init mysql failse ,err:",err.Error())
	}
	Db = db
	logger.Info("init mysql succ ")
	//defer  db.Close()
}


//Insert插入数据

func Insert(query string) bool  {
	r, err := Db.Exec(query)
	if err !=nil{
		logger.Info("mysql Insert failed,err: ",err)
		return false
	}
	id,err := r.LastInsertId()
	if err!=nil{
		logger.Info("mysql Insert failed Id,err: ",err)
		return false
	}
	logger.Info("mysql Insert succ, ",id)
	return true

}

//Delet删除数据

func Delet(query string) bool {
	res, err :=Db.Exec(query)
	if err != nil {
		logger.Info("mysql Delet failed,err: ", err)
		return false
	}
	row, err := res.RowsAffected()
	if err != nil {
		logger.Info("mysql Delet rows failed,err: ",err)
	}
	logger.Info("mysql Delet succ:",row)
	return true
}

//db Update 更新数据

func Update(query string) bool {
	res, err :=Db.Exec(query )
	if err != nil {
		logger.Info("mysql Update failed,err: ", err)
		return false
	}
	row, err := res.RowsAffected()
	if err != nil {
		logger.Info("mysql Update rows failed,err: ",err)
	}
	logger.Info("mysql Update succ:",row)
	return true
}



// get 获取数据

func close_rows(rows *sql.Rows){
	if rows != nil {
		rows.Close()
	}
}


//获取数据处理

func dealRows(rows *sql.Rows) []map[string]interface{}  {
	defer close_rows(rows)
	//获取列名
	Columns,err := rows.Columns()
	ColumnTypes,_ := rows.ColumnTypes()
	//获取每条数据的类型
	ColumnTypeMap := make(map[string]string)
	for _,v:=range ColumnTypes{
		ColumnTypeMap[v.Name()]  = v.DatabaseTypeName()
	}
	if err != nil{
		logger.Info("rows columns failed, err:",err)
	}
	//定义返回参数
	retValue :=make([]sql.RawBytes,len(Columns))
	//定义数据列名
	scandata :=make([]interface{},len(retValue))
	//数据赋值
	for i:=range retValue{
		scandata[i] = &retValue[i]
	}
	//定义返回数据类型
	var List []map[string]interface{}

	for rows.Next(){
		//检测超出获取
		err = rows.Scan(scandata...)
		if err !=nil{
			logger.Info("rows scan failed ,err",err.Error())
		}
		//定义数据格式
		rowMap := make(map[string]interface{})
		for i,colvalue := range retValue{
			if colvalue !=nil{
				key := Columns[i]
				value := string(colvalue)
			//	数据转换
				switch ColumnTypeMap[key] {
				case "INT":
					newValue, _ := strconv.Atoi(value)
					rowMap[key] = newValue
				case "TINYINT":
					newValue, _ := strconv.Atoi(value)
					rowMap[key] = newValue
				case "VARCHAR":
					rowMap[key] = value
				case "DATETIME":
					newValue, _ := time.Parse(value, value)
					rowMap[key] = newValue
				default:
					rowMap[key] = value
				}
			}
		}
		List = append(List,rowMap)
	}
	return List
}

//get_row 获取单独一数据

func get_row(query string) map[string]interface{} {
	var reData map[string]interface{}
	rows, err := Db.Query(query)
	if err != nil {
		logger.Info("mysql select all failed,err: ",err)
	}
	reList := dealRows(rows)
	if len(reList)>0{
		 reData = reList[0]
	}
	return reData
}
//Get_all  获取多条数据
func get_all(query string) []map[string]interface{}  {
	rows, err := Db.Query(query)
	if err != nil {
		logger.Info("mysql select all failed,err: ",err)
	}
	reList := dealRows(rows)
	return reList
}

package db

import (
	"fmt"
	"logger"
	"testing"
)

// ==========================
// Admin Vvooooooooooo
// Time  2020/1/8
// Explain
// ==========================

func TestSql_row(t *testing.T) {
	var info= "SELECT * FROM qj_mind"
	//获取一条数据
	rows := get_row(info)
	logger.Info("one mind_level,",rows["mind_level"])
	logger.Info("one,",rows)
	//获取多条数据
	all := get_all(info)
	logger.Info("all,",all)
	//插入
	sqlquery :="insert into qj_mind(mind_level,mind_stage,mind_star,playerid) values(%v,%v,%v,%v)"
	sqlquery =fmt.Sprintf(sqlquery,1 ,1 ,0 ,9527)
	result := Insert(sqlquery)
	logger.Info("Insert,",result)
	// 更新和删除和插入方式一致
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值