GO -操作mysql

数据库的连接

func initmysql() (err error) {dsn := "root:0806@tcp(127.0.0.1:3306)/sql_demo" //固定格式db, err = sql.Open("mysql", dsn)if err != nil {panic(err)}err = db.Ping()if err != nil {fmt.Println("ping 失败")return err}// 数值需要根据业务情况 决定db.SetConnMaxLifetime(time.Second * 10) //10sdb.SetMaxOpenConns(3)                   //最大连接数db.SetMaxIdleConns(1)                   //复用的         //最大空闲连接数return}

 主函数检测是否合法

err := initmysql()
if err != nil {fmt.Println("连接mysql失败")
}
//做完错误检查之后,确保db不为nil
defer db.Close()
fmt.Println("连接数据库mysql") //不能保证连接成功

 增删查改函数

type user struct {id   intname stringage  int
} //用来接收扫描的对象func querymultirow() {sqlstr := "select * from user where id>?"rows, err := db.Query(sqlstr, 0)if err != nil {fmt.Println("queur faild", err)return}defer rows.Close()for rows.Next() {var u usererr := rows.Scan(&u.id, &u.name, &u.age)if err != nil {fmt.Println("scan faild", err)}fmt.Println(u)}} //查询多行
func queryRowdemo() {sqlstr := "select * from user where id=?"var u user//此时这个row 没有调用scan ,那么链接不会释放//记住query调用完之后,一定调用scan方法row := db.QueryRow(sqlstr, 1) //每个row 是占用连接的// 连接没有了,不能再查询了  ,程序阻塞住了row = db.QueryRow(sqlstr, 2)err := row.Scan(&u.id, &u.name, &u.age)if err != nil {fmt.Println("scan err:", err)return}fmt.Printf("id:%d name:%s age:%d\n", u.id, u.name, u.age)} //查询单行记录
func insertrowdemo() {sqlstr := "insert into user(name,age) values(?,?)"ret, err := db.Exec(sqlstr, "王五", 88)if err != nil {fmt.Println("insert err:", err)}theid, err := ret.LastInsertId() //新插入的idif err != nil {fmt.Println("insert err:", err)return}fmt.Println("insert id:", theid)} //插入数据
func updaterowdemo() {sqlstr := "update user set age=? where id=?"ret, err := db.Exec(sqlstr, 39, 1) //把id为if err != nil {fmt.Println("update err:", err)}n, err := ret.RowsAffected() //影响的行数if err != nil {fmt.Println("update err:", err)}fmt.Println("affected:", n)
} //更新数据

事务

func transactiondemo() {tx, err := db.Begin() //开启事务if err != nil {if tx != nil {tx.Rollback() //回滚}fmt.Println("begin err:", err)return}sqlstr := "update user set age=36 where id=?"ret1, err := tx.Exec(sqlstr, 1)if err != nil {tx.Rollback()fmt.Println("exec err:", err)return}aff1, err := ret1.RowsAffected()if err != nil {tx.Rollback()fmt.Println("RowsAffected", err)return}sqlstr2 := "update user set age=40 where id=?"ret2, err := tx.Exec(sqlstr2, 2)if err != nil {tx.Rollback()fmt.Println("exec err:", err)return}aff2, err := ret2.RowsAffected()if err != nil {tx.Rollback()fmt.Println("RowsAffected", err)return}fmt.Println(aff1, aff2)if aff1 == 1 && aff2 == 1 {err = tx.Commit()fmt.Println("事务提交啦")if err != nil {tx.Rollback()fmt.Println("commit err:", err)return}} else {err = tx.Rollback()fmt.Println("tx.rollback err:回滚啦", err)}}

main函数

func main() {err := initmysql()if err != nil {fmt.Println("连接mysql失败")}//做完错误检查之后,确保db不为nildefer db.Close()fmt.Println("连接数据库mysql") //不能保证连接成功查询单行数据//queryRowdemo()查询多行数据//querymultirow()插入一条数据//insertrowdemo()//updaterowdemo()querymultirow()fmt.Println("查询结束了。。。。")transactiondemo()querymultirow()
}

小计:



//批量执行同一条sql语句,考虑预处理提升性能

//sql注入就是,传参的名字不合法如 “xxx”,不要自己拼接;

// 事务的相关方法 begin()  commit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/49786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从数据时代到智能时代,星环科技信雅达联合发布金融全栈解决方案

近年来,星环科技与信雅达在金融行业的多个关键领域展开了广泛而深入的合作,推出了一系列面向金融科技领域的联合解决方案。此次合作基于星环科技在大数据、人工智能和云计算领域的先进技术,以及信雅达在金融领域的深厚积累,围绕数…

nms概念

nms基本概念:非极大值抑制 用途:在做目标检测的时候,往往会生成很多很多候选框,在做目标检测的时候,往往会生成很多很多候选框。 处理流程: 1.对某一类按score对候选框进行排序,并选出score最…

爬虫学习——20.Scrapy框架(2)入门

Scrapy入门 前提:路径切换 cd copy path 复制绝对路径 1. 创建scrapy项目 scrapy startproject mySpider scrapy startproject(固定的) mySpider(不固定的 需要创建的项目的名字) 2. 进入项目里面:cd mySpider 3. 创建爬虫程序 scrapy genspider example example…

META 备受期待的 Llama 3 405B 即将发布

本心、输入输出、结果 文章目录 META 备受期待的 Llama 3 405B 即将发布前言Llama 3 405B或许会彻底改变专用模型的数据质量Llama 3 405B将形成新的模型生态系统:从基础模型到专家组合Llama 3 405B有最高效 API 的竞争Llama 3 405B 基准测试META 备受期待的 Llama 3 405B 即将…

【Unity国产化信创平台】麒麟银河V10系统虚拟机创建

目录 一、麒麟V10系统镜像下载 二、虚拟机创建流程 三、麒麟银河系统安装流程 一、麒麟V10系统镜像下载 https://www.kylinos.cn/# 官方访问还是会有问题,如果有需要麒麟银河Kylin系统V10的镜像文件,可以留下邮箱或者私信博主获取。 二、虚拟机创…

在Git项目中添加并应用“.gitignore”文件

在Git项目中添加并应用.gitignore文件 创建或修改.gitignore文件: 在项目的根目录下创建一个名为.gitignore的文件。如果已经有此文件,可以直接修改。 在文件中添加您希望Git忽略的文件和目录。例如: # 忽略所有的log文件 *.log# 忽略所有的…

SpringBoot3 JDK21 Vue3开源后台RBAC管理系统 | 2024年好用的开源RBAC管理系统 | 数据权限的探索

序言 项目现已全面开源,商业用途完全免费! 当前版本:v0.7.2。 如果喜欢这个项目或支持作者,欢迎Star、Fork、Watch 一键三连 🚀!! 在构建此代码框架的过程中,我已投入了大量精力&…

Nginx Proxy缓存

Proxy缓存 缓存类型 网页缓存 (公网)CDN数据库缓存 memcache redis网页缓存 nginx-proxy客户端缓存 浏览器缓存 模块 ngx_http_proxy_module 语法 缓存开关 Syntax: proxy_cache zone | off; Default: proxy_cache off; Context: http,…

Android Studio Build窗口出现中文乱码问题

刚安装成功的android studio软件打开工程,编译时下方build窗口中中文是乱码。 解决: 可点击studio状态栏的Help—>Edit Custom VM Options ,在打开的studio64.exe.vmoptions文件后面添加:(要注意不能有空格,否则st…

科技前沿:Llama 3.1的突破与革新

在科技的长河中,每一次模型的更新都是对人类智慧的致敬。今天,我们将聚焦于Meta公司最新发布的Llama 3.1系列模型,探索其在AI领域的前沿突破。 新模型的诞生 自去年以来,Meta公司不断推进人工智能技术的发展,终于在近…

Visual Studio 2022新建 cmake 工程测试 opencv helloworld

1. 参考博客: 1.1. https://blog.csdn.net/yangSHU21/article/details/130237669( 利用OpenCV把一幅彩色图像转换成灰度图 )( vs2022_cmake_test.cpp 中的代码用的此博客的,就改了下图片文件路径而已 ) 2. 检查 Visual Studio 2022是否支持 cmake&#…

SpringBoot 配置文件详解:properties 和 yml

目录 一、配置文件的作用 二、配置文件的格式 三、properties 配置文件说明 3.1 properties 基本语法 3.2 读取配置文件 四、yml 配置文件说明 4.1 yml基本语法 4.2 yml 读取文件 4.3 yml使用进阶 4.3.1 配置对象 4.3.2 配置集合 4.3.3 配置Map 一、配置文件的作用…

大数据之Oracle同步Doris数据不一致问题

数据同步架构如下: 出现的问题: doris中的数据条数 源库中的数据条数 总数完全不一致。 出现问题的原因: 在Dinky中建立表结构时,缺少对主键属性的限制 primary key(ID) not enforced 加上如上语句,数据条数解决一致 …

Internxt:适用于Linux开源安全云存储平台

有无数的云存储平台为您的文件提供安全可靠的存储空间。可在 Linux 上安装的热门云存储应用程序包括Dropbox、Nextcloud和Google Drive,遗憾的是,后者迄今为止不提供 Linux 客户端。 其他自托管选项包括OwnCloud、Pydio Cells、Seafile、Resilio和Synct…

学懂C语言(二十一):深入理解C语言中的函数指针和回调函数

C语言中的函数指针和回调函数是两个紧密相关的概念,它们在实现灵活和模块化的代码结构时非常有用。下面详细讲解这两个概念: 1、函数指针 函数指针是一个指向函数的指针变量。通过函数指针,可以间接调用函数,这在需要动态选择和…

matlab 小数取余 rem 和 mod有 bug

目录 前言Matlab取余函数1 mod 函数1.1 命令行输入1.2 命令行输出 2 rem 函数2.1 命令行输入2.2 命令行输出 分析原因注意 前言 在 Matlab 代码中mod(0.11, 0.1) < 0.01 判断为真&#xff0c;mod(1.11, 0.1) < 0.01判断为假&#xff0c;导致出现意料外的结果。 结果发现…

Leetcode509. 斐波那契数(递归和常规两种写法)

问题描述&#xff1a; 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0c;…

代码自动化重构工具OpenRewrite介绍

OpenRewrite 是一个用于大规模自动化代码重构的开源框架&#xff0c;它极大地提升了开发人员的研发效率&#xff0c;通过自动化地进行代码重构和转换&#xff0c;帮助开发人员消除代码库中的技术债务。 通过 LST、访问器和配方的结合&#xff0c;OpenRewrite 能够实现准确的代…

Python知识点背诵手册,详细知识梳理

Python知识点背诵手册&#xff0c;超详细知识梳理 Python是一种广泛使用的高级编程语言&#xff0c;以其简洁的语法和强大的库支持而闻名。以下是对Python知识点的超详细梳理&#xff0c;旨在帮助学习者系统地掌握Python语言的基础知识和进阶技能。 一、Python基础 1. 语言基…

走进数组的奇妙之旅(1)-学习笔记

引言&#xff1a; 在前几篇文章中&#xff0c;我们深入探讨了函数的奥秘。在讲述函数知识的过程中&#xff0c;我们邂逅了一个新的概念&#xff0c;你或许还记得在演示 strcpy函数时&#xff0c;出现的这行代码&#xff1a;char1[20]{0};。当时&#xff0c;你是否感到好奇&…