用 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 如果你是刚接…...
EFFACT架构:全同态加密硬件加速的创新设计
1. EFFACT架构概述:当硬件设计遇上全同态加密在密码学加速器的世界里,我们一直在寻找一个平衡点——如何在有限的芯片面积和功耗预算下,处理那些看似无解的复杂计算?EFFACT架构的诞生,正是为了解决全同态加密ÿ…...
终极指南:在Windows上安装安卓应用的简单解决方案
终极指南:在Windows上安装安卓应用的简单解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经希望在Windows电脑上直接运行手机应用…...
深入解析Umi-OCR:开源离线OCR工具的技术架构与实践应用
深入解析Umi-OCR:开源离线OCR工具的技术架构与实践应用 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语…...
5步解锁显卡隐藏性能:NVIDIA Profile Inspector全面指南
5步解锁显卡隐藏性能:NVIDIA Profile Inspector全面指南 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 想要让显卡发挥100%性能潜力吗?NVIDIA Profile Inspector作为一款专业的…...
惠普OMEN游戏本终极性能优化:OmenSuperHub开源工具完全指南
惠普OMEN游戏本终极性能优化:OmenSuperHub开源工具完全指南 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 还在为惠普OMEN游戏本官方软件的臃…...
深度解析AzurLaneAutoScript:碧蓝航线自动化脚本的技术架构与应用实践
深度解析AzurLaneAutoScript:碧蓝航线自动化脚本的技术架构与应用实践 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript…...
Aspose全家桶实战:从零构建一个.NET 6的文档转换微服务(含Docker部署)
Aspose全家桶实战:从零构建.NET 6文档转换微服务 在数字化转型浪潮中,企业文档处理需求正经历从碎片化到集中化的转变。传统单体应用中分散的Word转PDF、Excel报表生成等功能,不仅难以维护,更无法适应云原生时代对弹性伸缩和高可用…...
【MYSQL】在Centos7和ubuntu22.04环境下安装
一.MYSQL在Centos7下的安装注意:安装与卸载中,⽤⼾全部切换成为root初期练习,mysql不进⾏⽤⼾管理,全部使⽤root进⾏1.卸载内置环境1-1卸载不要的环境[rootVM-0-3-centos ~]$ ps ajx |grep mariadb # 先检查是否有mariadb存在 131…...
HS2-HF_Patch:3步完成Honey Select 2汉化去码与插件整合
HS2-HF_Patch:3步完成Honey Select 2汉化去码与插件整合 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为《Honey Select 2》的游戏体验而烦恼…...
宏和电子冲刺港股:年营收11.7亿,利润2亿 股价一年上涨超10倍 市值1213亿
雷递网 雷建平 5月17日宏和电子材料科技股份有限公司(简称:“宏和电子”)日前递交招股书,准备在港交所上市。宏和电子2019年7月已在上交所上市。宏和科技在2025年5月时股价才9元,但一年时间股价上涨超过10倍࿰…...
