当前位置: 首页 > news >正文

golang操作mysql基础驱动github.com/go-sql-driver/mysql使用

golang中类似java操作mysql的jdbc一样,github.com/go-sql-driver/mysql也为go提供了基础接口,在开发中往往需要写更多的代码来满足自己的定制需求,java在驱动基础上有了扩展,orm框架诞生,mybatis、jpa等都是好用的扩展框架,go也不例外除了知道基础框架的实现和使用外,其他的orm框架也要轻松上手知道他们怎么在基础之上实现的,是否自己实现一套框架,go中的mysql框架比较多,这意味着基础框架github.com/go-sql-driver/mysql做的相当优秀,上层可以i灵活且自由的实现,我们这次主要是复习基础驱动的使用,如下:

package mainimport ("database/sql""fmt""log""time"_ "github.com/go-sql-driver/mysql"
)//  用户表结构体
type User struct {id       int64  `db:"id"`name     string `db:"name"`password string `db:"password"`age      int    `db:"age"`
}var MysqlDb *sql.DB
var MysqlDbErr errorconst (USER_NAME = "root"PASS_WORD = "fbw123"HOST      = "localhost"PORT      = "3307"DATABASE  = "node"CHARSET   = "utf8"
)func linksql() {dbDSN := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s", USER_NAME, PASS_WORD, HOST, PORT, DATABASE, CHARSET)// 打开连接失败MysqlDb, MysqlDbErr = sql.Open("mysql", dbDSN)//defer MysqlDb.Close();if MysqlDbErr != nil {log.Println("dbDSN: " + dbDSN)panic("数据源配置不正确: " + MysqlDbErr.Error())}// 最大连接数MysqlDb.SetMaxOpenConns(100)// 闲置连接数MysqlDb.SetMaxIdleConns(20)// 最大连接周期MysqlDb.SetConnMaxLifetime(100 * time.Second)if MysqlDbErr = MysqlDb.Ping(); nil != MysqlDbErr {panic("数据库链接失败: " + MysqlDbErr.Error())} else {fmt.Println("数据库连接成功")}
}// 查询数据,指定字段名---完成
func StructQueryField(id int64) {user := new(User)row := MysqlDb.QueryRow("select id, name, age,password from user where id=?", id)if err := row.Scan(&user.id, &user.name, &user.age, &user.password); err != nil {fmt.Printf("scan failed, err:%v", err)fmt.Println("查询失败")return}fmt.Println(user.id, user.name, user.age, user.password)
}// 查询数据,取所有字段-----完成
func StructQueryAllField() {// 通过切片存储users := make([]User, 0)//分页查询一次查询2个记录rows, _ := MysqlDb.Query("SELECT * FROM `user` limit ?", 2)// 遍历var user Userfor rows.Next() {rows.Scan(&user.id, &user.name, &user.age, &user.password)users = append(users, user)}fmt.Println(users)}// 插入数据-----完成
func StructInsert(id int, name string, age int8, password string) {ret, _ := MysqlDb.Exec("insert INTO user(id,name,age,password) values(?,?,?,?)", id, name, age, password)//插入数据的主键idlastInsertID, _ := ret.LastInsertId()fmt.Println("LastInsertID:", lastInsertID)//影响行数rowsaffected, _ := ret.RowsAffected()fmt.Println("RowsAffected:", rowsaffected)}// 更新数据 -------完成
func StructUpdate(id int64, name string, password string, age int8) {ret, _ := MysqlDb.Exec("UPDATE user set name=?,password=?,age=? where id=?", name, password, age, id)upd_nums, _ := ret.RowsAffected()fmt.Println("RowsAffected:", upd_nums)
}// 删除数据------完成
func StructDeluserByid(id uint64) {ret, _ := MysqlDb.Exec("delete from user where id=?", id)del_nums, _ := ret.RowsAffected()fmt.Println("RowsAffected:", del_nums)
}// 事务处理,结合预处理----完成
func StructTx() {//事务处理,前面的插入代码没有什么问题,在后面的条件不满足下事务回滚tx, _ := MysqlDb.Begin()// 新增userAddPre, _ := MysqlDb.Prepare("insert into user(name,password,age) values(?, ?,?)")addRet, _ := userAddPre.Exec("zhaoliu", "mima", 12)ins_nums, _ := addRet.RowsAffected()// 更新userUpdatePre1, _ := tx.Exec("update user set name = 'zhansan'  where name=?", "张三")upd_nums1, _ := userUpdatePre1.RowsAffected()userUpdatePre2, _ := tx.Exec("update user set name = 'lisi'  where name=?", "李四")upd_nums2, _ := userUpdatePre2.RowsAffected()fmt.Println(ins_nums)fmt.Println(upd_nums1)fmt.Println(upd_nums2)if ins_nums > 0 && upd_nums1 > 0 && upd_nums2 > 0 {tx.Commit()} else {tx.Rollback()}}// 查询数据,指定字段名,不采用结构体 ------完成
func RawQueryField() {rows, _ := MysqlDb.Query("select id,name from user")if rows == nil {return}id := 0name := ""fmt.Println(rows)for rows.Next() {rows.Scan(&id, &name)fmt.Println(id, name)}
}// 查询数据,取所有字段,不采用结构体------完成
func RawQueryAllField() {//查询数据,取所有字段rows2, _ := MysqlDb.Query("select * from user")//返回所有列cols, _ := rows2.Columns()//这里表示一行所有列的值,用[]byte表示vals := make([][]byte, len(cols))//这里表示一行填充数据scans := make([]interface{}, len(cols))//这里scans引用vals,把数据填充到[]byte里for k, _ := range vals {scans[k] = &vals[k]}i := 0result := make(map[int]map[string]string)for rows2.Next() {//填充数据rows2.Scan(scans...)//每行数据row := make(map[string]string)//把vals中的数据复制到row中for k, v := range vals {key := cols[k]//这里把[]byte数据转成stringrow[key] = string(v)}//放入结果集result[i] = rowi++}fmt.Println(result)for k, v := range result {fmt.Println(k, v)//每条属性打一遍for k, p := range v {fmt.Println(k, p)}}
}func main() {linksql()// StructQueryField(2020110131)// StructInsert(100,"lv"",23 "wenli")// StructQueryAllField()// StructUpdate(100,"少年","wjr",20)// StructDeluserByid(100)// StructTx()//查询所有的数据显示指定字段// RawQueryField()RawQueryAllField()
}

相关文章:

golang操作mysql基础驱动github.com/go-sql-driver/mysql使用

golang中类似java操作mysql的jdbc一样,github.com/go-sql-driver/mysql也为go提供了基础接口,在开发中往往需要写更多的代码来满足自己的定制需求,java在驱动基础上有了扩展,orm框架诞生,mybatis、jpa等都是好用的扩展…...

正则表达式完全指南,总结全面通俗易懂

目录 元字符 连接符 限定符 定位符 修饰符(标记) 运算符优先级 普通字符集及其替换 零宽断言 正向先行断言 负向先行断言 正向后发断言 负向后发断言 捕获组 普通捕获组 命名捕获组 PS:非捕获组 正则表达式在线测试: 正则在线测试工具 …...

运维面试题.云计算面试题之三ELK

1.ELK是什么? ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写 Elasticsearch:负责日志检索和储存 Logstash:负责日志的收集和分析、处理 Kibana:负责日志的可视化 这三款软件都是开源软件,通常是配合使用,而且又先后归于 Elastic.co 公司名下,…...

C# DataTable使用Linq查询详解

前奏- C# 对DataTable进行查询 C# 可以对 DataTable 进行查询。在 .NET 框架中,DataTable 类提供了几种方法来查询数据,包括 Select 方法和 AsEnumerable 扩展方法(在 System.Data.DataSetExtensions 命名空间中)。 使用 Select…...

【企业级分布式系统】ELK优化

文章目录 Elasticsearch作为日志存储时的优化优化ES索引设置优化线程池配置锁定内存,不让JVM使用Swap减少分片数、副本数 Elasticsearch作为日志存储时的优化 linux内核优化、JVM优化、ES配置优化、架构优化(filebeat/fluentd代替logstash、加入kafka做…...

51单片机基础05 定时器

目录 一、为什么要定时器 二、定时器中断 1、定时器中断参数 2、定时器中断程序 3、定时器计数 一、为什么要定时器 前文提到,比如进行流水灯等操作,都是直接写了delay_ms这类操作。 但是在51单片机中,其一般就是靠双for进行的循环时延&…...

tdengine学习笔记实战-jdbc连接tdengine数据库

先上代码,里面有两种获取连接的方式,一个单例,一个连接池 package com.tdengine.utils;import com.alibaba.druid.pool.DruidDataSource;import java.sql.*; import java.util.Properties;public class TDConnectUtils {// 单例对象private …...

vue3项目执行npm install下载依赖报错问题排查方法

1、检查当前node与npm的版本 nodejs 和 npm 的版本是有适配的,具体可以看官网:nodejs 和 npm 的版本是有适配的 若是版本不兼容,修改node或者npm的版本即可,建议使用nvm版本管理工具,切换方便; 2、清除缓…...

【vue】项目迭代部署后 自动清除浏览器缓存

前言&#xff1a; vue项目打包部署上线后&#xff0c;因浏览器缓存问题&#xff0c;导致用户访问的依旧是上个迭代批次的旧资源&#xff0c;需要用户手动清除缓存才能更新至最新版本&#xff0c;影响用户体验。 解决方法&#xff1a; html根文件添加以下标签 <meta http-eq…...

Leetcode(滑动窗口习题思路总结,持续更新。。。)

讲解题目&#xff1a;长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target &#xff0c;找出该数组中满足其和 ≥ target 的长度最小的连续子数组。如果不存在符合条件的连续子数组&#xff0c;返回 0。示例: 输入: target 7, nums [2,3,1,2,4,3] 输出: 2 解…...

【UNIAPP】uniapp版图片压缩工具

二次封装的uniapp版本图片压缩、上传工具&#xff0c;支持全端&#xff08;H5、小程序、APP&#xff09; 新建文件&#xff1a;file-util.js class FileUtil {/*** [文件上传]* param {[object]} fileObj [图片地址]* param {[object]} formData [参数]* param {[str…...

PaddlePaddle 开源产业级文档印章识别PaddleX-Pipeline “seal_recognition”模型 开箱即用篇(一)

AI时代到来&#xff0c;各行各业都在追求细分领域垂直类深度学习模型&#xff0c;今天给大家介绍一个PaddlePaddle旗下&#xff0c;基于PaddleX Pipeline 来完成印章识别的模型“seal_recognition”。 官方地址&#xff1a;https://github.com/PaddlePaddle/PaddleX/blob/relea…...

Vue3 + Vite 项目引入 Typescript

文章目录 一、TypeScript简介二、TypeScript 开发环境搭建三、编译方式1. 自动编译单个文件2. 自动编译整个项目 四、配置文件1. compilerOptions基本选项严格模式相关选项&#xff08;启用 strict 后自动包含这些&#xff09;模块与导入相关选项 2. include 和 excludeinclude…...

微信小程序实战篇-分类页面制作

一、项目背景与目标 在微信小程序开发中&#xff0c;分类页面是一个常见且重要的功能模块。它能够帮助用户快速定位和浏览不同类别的商品或信息&#xff0c;提升用户体验和操作效率。今天&#xff0c;我们将深入探讨如何制作一个实用的微信小程序分类页面&#xff0c;先来看一下…...

第三十七章 如何清理docker 日志

如何清理docker 日志 目标 掌握docker 日志设置掌握docker日志的清理办法背景 在现代软件开发和部署环境中,Docker 容器技术因其轻量级、可移植性和高效资源利用的特点,已成为许多企业和开发团队的首选。Docker 容器在运行过程中会产生大量的日志信息,这些日志对于监控容器…...

二刷代码随想录第七天

454. 四数相加 II 先用map记录前两个数的和num1 num2的值出现了多少次再在后两个数组里找0 - (num1 num2),找到后就累加map中的次数 class Solution { public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3…...

1.tree of thought (使用LangChain解决4x4数独问题)

本教程将介绍如何使用LangChain库和chatglm API来解决一个4x4的数独问题。我们将通过以下步骤实现这一目标&#xff1a; 初始化chatglm 的聊天模型。定义数独问题和解决方案。创建一个自定义的检查器来验证每一步的思考。使用ToTChain来运行整个思考过程。 1. 初始化chatglm4…...

网络基础(4)IP协议

经过之前的学习对传输协议的学习&#xff0c;对于传输协议从系统底层到应用层对于socket套接字的学习已经有了一套完整的理论。 对于网络的层状结构&#xff0c;现在已经学习到了应用层和传输层: 在之前的学习中&#xff0c;通信的双方都只考虑了双方的传输层的东西&#xff0…...

124. 二叉树中的最大路径和【 力扣(LeetCode) 】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 124. 二叉树中的最大路径和 一、题目描述 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径…...

echarts:简单实现默认显示两柱子折线,点击按钮后显示新的柱子

问&#xff1a; 用echarts实现&#xff1a;默认显示两柱子折线&#xff0c;点击“税率”按钮&#xff0c;显示税率柱子&#xff0c;之前的两柱子折线消失 回答&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8…...

视频里的音频怎么提取出来成单独文件?音频提取照着这些方法做

在数字时代&#xff0c;视频与音频的分离与重组已成为日常需求之一。无论是出于制作背景音乐、保存讲座内容&#xff0c;还是编辑播客素材&#xff0c;提取视频中的音频并将其保存为单独文件都显得尤为重要。视频里的音频怎么提取出来成单独文件&#xff1f;本文将详细介绍几种…...

Excel——宏教程(精简版)

一、宏的简介 1、什么是宏&#xff1f; Excel宏是一种自动化工具&#xff0c;它允许用户录制一系列操作并将其转换为VBA(Visual Basic for Applications)代码。这样&#xff0c;用户可以在需要时执行这些操作&#xff0c;以自动化Excel任务。 2、宏的优点 我们可以利用宏来…...

C++中的std::tuple和std::pair

在C标准库中&#xff0c;std::tuple和std::pair是两种极具实用性的数据结构&#xff0c;它们都具备存储多个元素的功能&#xff0c;但各自有其独特的适用环境和特性。本文旨在深入探讨这两者之间的区别&#xff0c;并阐述在不同应用场景下应如何合理选择使用。 一、基本概念 s…...

引力搜索算法

引力搜索算法过程&#xff0c;包括了初始化、适应度评估、质量计算、加速度计算、更新速度和位置的一些步骤。 import numpy as np import random as rd from math import exp, sqrt import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotli…...

【时间之外】IT人求职和创业应知【35】-RTE三进宫

目录 新闻一&#xff1a;京东工业发布11.11战报&#xff0c;多项倍增数据体现工业经济信心提升 新闻二&#xff1a;阿里云100万核算力支撑天猫双11&#xff0c;弹性计算规模刷新纪录 新闻三&#xff1a;声网CEO赵斌&#xff1a;RTE将成为生成式AI时代AI Infra的关键部分 认知…...

Linux的目录结构

/ ├── bin # Binary - 存放用户可以直接使用的基本二进制可执行文件 ├── sbin # System Binaries - 存放系统管理员专用的二进制可执行文件 ├── usr # Unix System Resources - 存放用户使用的软件和库文件 │ ├── bin # Binary - 用户级应用程序…...

python: generator IDAL and DAL using sql server 2019

其它数据库也是一样的思维方式 create IDAL # encoding: utf-8 # 版权所有 2024 ©涂聚文有限公司 # 许可信息查看&#xff1a;言語成了邀功盡責的功臣&#xff0c;還需要行爲每日來值班嗎 # 描述&#xff1a; # Author : geovindu,Geovin Du 涂聚文. # IDE : P…...

命令执行简单

前言&#xff1a;小迪安全2022第一节反弹shell&#xff0c;小迪用的是两台都是云服务器&#xff0c;没有服务器可以在自己的主机上搭建也是可以的&#xff0c;主机上搭两个网站 思路&#xff1a;生成一个木马文件&#xff0c;下载到本机&#xff0c;然后利用本机上传到目标主机…...

【一句话经验】亚马逊云EC2 ubuntu24.04.1开启ROOT登录Permission denied (publickey)

按照常规的方法SSH登录会一直报错&#xff1a; Permission denied (publickey) 因为亚马逊云的默认配置不是在/etc/ssh/sshd_config&#xff0c;而是在引入的文件里了&#xff0c;所以在instance控制台输入这行命令来解除登录限制&#xff1a; sudo sed -i s/^PasswordAuthe…...

百度智能云千帆大模型平台引领企业创新增长

本文整理自百度世界大会 2024——「智能跃迁 产业加速」论坛的同名演讲。 更多大会演讲内容&#xff0c;请访问&#xff1a; https://baiduworld.baidu.com 首先&#xff0c;跟大家分享一张图&#xff0c;这个是我们目前大模型应用落地的场景分布。可以看到&#xff0c;大模型…...

伊利集团网站建设实训/西安网站制作工作室

这篇文章主要介绍了MySQL的字符集操作命令总结&#xff0c;包括各种查看数据库、数据表等查询命令,需要的朋友可以参考下以下均在mysql 5.5命令行中运行通过&#xff1a;查看MySQL支持的字符集&#xff1a;代码如下:show charset;查看字符集&#xff1a;代码如下:status下面的更…...

自做网站告白如何弄/网络广告营销的概念

一、thrift返回结果封装 Thrift文件添加版本号&#xff0c;方便对thrift的版本进行控制 服务与返回的数据类型分开定义 在项目中使用Thrift提供RPC服务时&#xff0c;很多情况下我们都会将返…...

wordpress多级索引/使用 ahrefs 进行 seo 分析

Qt中有这么多类的事件,我们怎么样比较简便的处理每个事件呢?设想,如果是每个事件都对应同一个事件处理器,在该事件处理器中对不同的事件进行分类处理,这样的弊端有两点:第一,导致该事件处理器过于臃肿复杂;第二,这样不便于扩展,当系统新增加事件类型或者是我们需要使…...

二级网站建设 管理思路/挖掘关键词工具

TwinCAT Target VisuCE 显示语言动态切换——借助 ——借助 Excel 编辑 XML 文件 Beckhoff 基于 WinCE 平台的 TwinCAT Target VisuCE 支持多种语言显示,工程运行......VISUAL IDENTITYI 视觉识别系统制作:扣子 视视觉觉识识别别系系统统 VISUAVLISIUDAELNTIDITEYNITITYI 视觉识…...

建设英语网站目的/鸿科经纬教网店运营推广

第八章 高可用负载均衡集群 1 Nginx配置优化 1)服务器准备&#xff1a;192. 168.78.3 192. 168.78.128 2)使用ApacheBench工具 在客户端切换到Apache安装目录的bin目录&#xff0c;该目录下的ab程序就是ApacheBench工具。具体使用示例如下&#xff1a; 解释&#xff1a;ab命令…...

wordpress自定义内容管理/天眼查企业查询

Zookeeper的目录整理如下 1. 【分布式】分布式架构 2. 【分布式】一致性协议 3. 【分布式】Chubby与Paxos 4. 【分布式】Zookeeper与Paxos 5. 【分布式】Zookeeper使用--命令行 6. 【分布式】Zookeeper使用--Java API 7. 【分布式】Zookeeper使用--开源客户端 8. 【分布式】Zoo…...