用 Go 访问 MySql 数据库

- 所有代码样例
package mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql"
)var db *sql.DB// 初始化连接
func initDB() (err error) {db, err = sql.Open("mysql", "root:mm..1213@tcp(127.0.0.1:3306)/chapter4")if err != nil {return nil}err = db.Ping()if err != nil {return err}return nil
}type User struct {Uid intName stringPhone string
}// 单行查询
func queryRow() {u := User{}err := db.QueryRow("select uid,name,phone from `user` where uid=?", 1).Scan(&u.Uid, &u.Name, &u.Phone)if err != nil {fmt.Printf("scan failed,err:%v\n", err)return}fmt.Printf("uid:%d name:%s phone:%s\n", u.Uid, u.Name, u.Phone)
}// 多行查询
func queryMultiRow() {u := User{}rows, err := db.Query("select uid,name,phone from `user` where uid > ?", 0)if err != nil {fmt.Printf("query failed, err:%v\n", err)return}defer rows.Close()for rows.Next() {err := rows.Scan(&u.Uid, &u.Name, &u.Phone)if err != nil {fmt.Printf("scan failed, err:%v\n", err)return}fmt.Printf("uid:%d name:%s phone:%s\n", u.Uid, u.Name, u.Phone)}
}// 插入操作
func insertRow() {ret, err := db.Exec("insert into user(name,phone) values (?,?)", "王五", 13988557744)if err != nil {fmt.Printf("insert failed,err:%v\n", err)return}uid, err := ret.LastInsertId()if err != nil {fmt.Printf("get lastinsert Id failed,err:%v\n", err)return}fmt.Printf("insert success,the id is %d.\n", uid)
}// 更新数据
func updateRow() {ret, err := db.Exec("update user set name=? where uid =?", "张三", 3)if err != nil {fmt.Printf("update failed,err:%v\n", err)return}n, err := ret.RowsAffected()if err != nil {fmt.Printf("get RowsAffected failed,err:%v\n", err)}fmt.Printf("update success, affected rows:%d\n", n)
}// 删除数据
func deleteRow() {ret, err := db.Exec("delete from user where uid = ?", 2)if err != nil {fmt.Printf("delete failed,err:%v\n", err)return}n, err := ret.RowsAffected()if err != nil {fmt.Printf("get RowsAffected failed,err:%v\n", err)return}fmt.Printf("delete success,affected rows:%d\n", n)
}// 预处理查询
func prepareQuery() {u := User{}stmt, err := db.Prepare("select uid,name,phone from `user` where uid>?")if err != nil {fmt.Printf("prepare failed,err:%v\n", err)return}defer stmt.Close()rows, err := stmt.Query(0)if err != nil {fmt.Printf("prepare failed:%v\n", err)return}defer rows.Close()for rows.Next() {err := rows.Scan(&u.Uid, &u.Name, &u.Phone)if err != nil {fmt.Printf("scan failed %v\n", err)return}fmt.Printf("uid:%d name:%s phone:%s\n", u.Uid, u.Name, u.Phone)}
}// 预处理插入
func prepareInsert() {stmt, err := db.Prepare("insert into user(name,phone) values (?,?)")if err != nil {fmt.Printf("prepare failed,err:%v\n", err)return}defer stmt.Close()_, err = stmt.Exec("barry", 18799887766)if err != nil {fmt.Printf("insert failed,err:%v\n", err)return}_, err = stmt.Exec("jim", 18999999999)if err != nil {fmt.Printf("insert failed,err:%v\n", err)return}fmt.Printf("insert success")
}// 事务操作
func transaction() {tx, err := db.Begin()if err != nil {if tx != nil {tx.Rollback()}fmt.Printf("begin trans failed,err:%v\n", err)return}_, err = tx.Exec("update user set name='james' where uid=?", 1)if err != nil {tx.Rollback()fmt.Printf("exec sql1 failed,err:%v\n", err)return}_, err = tx.Exec("update user set name='james' where uid=?", 3)if err != nil {tx.Rollback()fmt.Printf("exec sql2 failed,err:%v\n", err)return}tx.Commit()fmt.Printf("exec transaction success!")
}// SQL 自行拼接语句,会好不要这样写,会被注入,引发安全问题
func sqlInject(name string) {sqlStr := fmt.Sprintf("select uid, name, phone from user where name='%s'", name)fmt.Printf("SQL:%s\n", sqlStr)rows, err := db.Query(sqlStr) // 使用 db.Query 执行查询语句if err != nil {fmt.Printf("query failed,err:%v\n", err)return}defer rows.Close()for rows.Next() {u := User{}err := rows.Scan(&u.Uid, &u.Name, &u.Phone)if err != nil {fmt.Printf("scan failed %v\n", err)return}fmt.Printf("uid:%d name:%s phone:%s\n", u.Uid, u.Name, u.Phone)}
}func main() {err := initDB()if err != nil {fmt.Printf("init db failed,err:%v\n", err)}sqlInject("james")
}相关文章:
用 Go 访问 MySql 数据库
所有代码样例 package mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql" )var db *sql.DB// 初始化连接 func initDB() (err error) {db, err sql.Open("mysql", "root:mm..1213tcp(127.0.0.1:3306)/chapte…...
mac 升级node到指定版本
node版本14.15.1升级到最新稳定版18.18.2 mac系统 先查看一下自己的node版本 node -v开始升级 第一步 清除node的缓存 sudo npm cache clean -f第二步 安装n模块【管理模块 n是管理 nodejs版本】 sudo npm install -g n第三步升级node sudo n stable // 把当前系统的 Node…...
欢迎进QQ群讨论交流
...
C语言解决八皇后问题
八皇后问题是指在一个88的棋盘上,放置8个皇后,使得任意两个皇后都不能在同一行、同一列或同一斜线上。这是一个著名的递归问题。下面是一个C语言实现八皇后问题的代码,以及对代码的讲解。 #include <stdio.h>int board[8][8] {0}; //…...
springboot集成canal,将数据发送至接口
前置条件: mysql开启binlog日志部署canal服务 Springboot代码: 接口工具类: import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; imp…...
Selenum八种常用定位(案例解析)
Selenium是一个备受推崇的工具。它有着丰富的功能,让我们能够与网页互动,执行各种任务,能为测试工程师和开发人员提供了很大的便利。 要充分利用Selenium,就需要了解如何正确定位网页上的元素。 接下来我将带大家共同探讨Seleni…...
Web前端接入Microsoft Azure AI文本翻译
Azure 文本翻译是 Azure AI 翻译服务的一项基于云的 REST API 功能。 文本翻译 API 支持实时快速准确地进行源到目标文本翻译。 文本翻译软件开发工具包 (SDK) 是一组库和工具,可用于轻松地将文本翻译 REST API 功能集成到应用程序中。 文本翻译 SDK 可跨 C#/.NET、…...
容联七陌助力鱼跃医疗升级智能联络中心,让客户服务更“鱼跃”
在当今高度竞争的市场环境中,企业的客户服务质量对于维护品牌形象和保持竞争优势至关重要。而随着人工智能、大数据等技术快速发展,智能化客户服务正在成为各行各业发展的重要部分。 鱼跃医疗是一家致力于“用科技律动生命"的国内知名医疗制造企业…...
【Redis系列】在Centos7上安装Redis5.0保姆级教程!
哈喽, 大家好,我是小浪。那么最近也是在忙秋招,很长一段时间没有更新文章啦,最近呢也是秋招闲下来,当然秋招结果也不是很理想,嗯……这里就不多说啦,回归正题,从今天开始我们就开始正…...
线性代数-Python-03:矩阵的变换 - 手写Matrix Transformation及numpy中的用法
文章目录 一、代码仓库二、旋转矩阵的推导及图形学中的矩阵变换2.1 让横坐标扩大a倍,纵坐标扩大b倍2.2 关于x轴翻转2.3 关于y轴翻转2.4 关于原点翻转(x轴,y轴均翻转)2.5 沿x方向错切2.6 沿y方向错切2.7 旋转2.8 单位矩阵2.9 矩阵的…...
【单片机基础】按键状态机实现短按、长按、双击、三击和N击
下载地址: 【CSDNNaiva】源码:HK32F030M-按键扫描-短按长按检测【CSDNNaiva】源码:HK32F030M-ADC-EXTI-TM1624-USART-EEPROM-TiMBase-按键长按(231024) 参考资料 [1] 【CSDNPillarPeng】【按键】[独立按键] - 1: 单击,…...
Ubuntu虚拟机部署OpenStack
1、部署环境 系统:ubuntu-22.04.3-desktop-amd64DevStack版本:2024.1VMware Workstation:8G内存、4核处理器、100G硬盘/1、网络NAT模式/1 2、Ubuntu环境设置 点击show applications,选择Software&Updates 跟换Ubuntu的镜像…...
ES在企业项目中的实战总结,彻底掌握ES的使用
通过之前两篇文章 了解了ES的核心概念和基础使用学习进阶的DSL语法处理复杂的查询 这段时间通过在本企业代码中对ES框架的使用,总结了不少经验。主要分为三点 企业封装了ES原生的api,需要使用企业项目提供的接口实现 -------简单使用(本章节目…...
QT的Qporcess功能的使用
具体实现代码如下: #include <QProgressBar>//必须要包含的头文件 #include <QProcess>// 创建一个QProgressBar对象QProgressBar *progressBar new QProgressBar(this);QProcess *proces;process_shownew process;// 设置进度条的最小值和最大值prog…...
【图灵诸葛】jvm笔记
2023年10月23日14:04:44 jvm 1.jdk体系结构图回顾(Av333129672,P1) jdk jre 底层是hotspot jvm 2.java虚拟机内部组成(Av333129672,P2) 堆 方法区 执行引擎 类加载 本地方法栈 线程栈(虚拟机栈) 3.java虚拟机栈讲解(Av333129672,P3) 程序计数器…...
数据安全小课堂开讲啦!看这里!
数据安全小课堂开讲啦!看这里! 1、什么是数据? 《数据安全法》第三条明确,本法所称的数据,就是指任何以电子或者其他方式对信息的记录。小到个人使用手机、电脑等电子产品时浏览的网页、下载的应用、存储的文件&…...
单片机矩阵键盘
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、什么是矩阵键盘?1.独立键盘2.矩阵键盘变化1变化2变化3 3. 通过变型,举一反三,就可以实现4*4的矩阵键盘扫描 二、使用步骤…...
横坐标日期等间隔绘图 python示例代码
有两列数据,一列是日期,另一列是数值。日期是递增的,但是间隔不是均匀的。比如1月1日至2月1日有10组数据,2月1日至3月1日有100组数据,3月1日至4月1日有1000组数据。我想绘折线图,横坐标是日期,纵…...
photoshop2024免费插件Portraiture3
随着手机摄影的普及,修图可以说是现代人的必备生活技能之一了,现在谁发个朋友圈不把自己的照片修的美美的呢?那么如何拥有一张氛围感满满的照片呢?这不得不提图片处理软件中的王牌——photoshop。作为专业的图片处理软件ÿ…...
NewStarCTF2023week4-More Fast(GC回收)
打开链接,存在很多个类,很明显是php反序列化漏洞利用,需要构造pop链 , 关于pop链构造的详细步骤教学,请参考我之前的博客,真的讲得很详细也容易理解: http://t.csdnimg.cn/wMYNB 如果你是刚接…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
