package mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql"
)var db *sql.DBtype user struct {id   intname stringage  int
}// 建立连接
func initDB() (err error) {dsn := "root:123456@tcp(127.0.0.1:3306)/mysqltest"db, err = sql.Open("mysql", dsn)if err != nil {return}fmt.Println("连接数据库成功")db.SetMaxIdleConns(10)return
}// 增加
func insert() {sqlStr := `insert into usertest(name,age) values("星期三",30)`ret, err := db.Exec(sqlStr)if err != nil {fmt.Printf("insert failed,err:%v\n", err)return}id, err := ret.LastInsertId() //获取IDif err != nil {fmt.Printf("get id failed ,err:%v\n", err)return}fmt.Println("id", id)
}// 删除
func deleteRow(id int) {sqlStr := `delete from  usertest where id=?`ret, err := db.Exec(sqlStr, id)if err != nil {fmt.Printf("delete failed,err:%v\n", err)return}n, _ := ret.RowsAffected()fmt.Printf("删除了%d行的数据\n", n)
}// 改update
func updateRow(newAge int, id int) {sqlStr := `update usertest set age=? where id=?`ret, err := db.Exec(sqlStr, newAge, id)if err != nil {fmt.Printf("update failed,err:%v\n", err)return}n, _ := ret.RowsAffected()fmt.Printf("更新了%d行数据\n", n)
}// 查询-单行
func query(id int) {sqlStr := "select id,name,age from usertest where id=?;"rowObj := db.QueryRow(sqlStr, id) //用于执行单行查询的方法var u1 userrowObj.Scan(&u1.id, &u1.name, &u1.age) //将查询结果扫描到变量中fmt.Printf("u1:%#v\n", u1)
}// 查询-多行
func queryMore(n int) {sqlStr := "select id,name,age from user where id >?;"rows, err := db.Query(sqlStr, n)if err != nil {fmt.Printf("%s query failed,err:%v\n", sqlStr, err)return}defer rows.Close()for rows.Next() {var u1 userrows.Scan(&u1.id, &u1.name, &u1.age)fmt.Printf("u1:%#v\n", u1)}
}// 模糊查询
func queryNameLike(pattern string) {sqlStr := "SELECT id,name,age FROM usertest WHERE name LIKE ?"rows, err := db.Query(sqlStr, "%"+pattern+"%")if err != nil {fmt.Printf("query failed, err:%v\n", err)return}defer rows.Close()fmt.Println("模糊查询结果:")for rows.Next() {var u usererr := rows.Scan(&u.id, &u.name, &u.age)if err != nil {fmt.Printf("scan failed, err:%v\n", err)return}fmt.Printf("ID:%d Name:%s Age:%d\n", u.id, u.name, u.age)}// 检查遍历是否出错if err = rows.Err(); err != nil {fmt.Printf("rows iteration error:%v\n", err)}
}// 年龄范围查询
func queryByAgeRange(minAge, maxAge int) {sqlStr := `SELECT id, name, age FROM usertest WHERE age BETWEEN ? AND ? ORDER BY age DESC`rows, err := db.Query(sqlStr, minAge, maxAge)if err != nil {fmt.Printf("query failed, err:%v\n", err)return}defer rows.Close()fmt.Printf("年龄%d~%d查询结果:\n", minAge, maxAge)for rows.Next() {var u userif err := rows.Scan(&u.id, &u.name, &u.age); err != nil {fmt.Printf("scan failed, err:%v\n", err)return}fmt.Printf("ID:%d Name:%s Age:%d\n", u.id, u.name, u.age)}if err = rows.Err(); err != nil {fmt.Printf("rows error:%v\n", err)}
}// 3. 预处理更新
func preparedUpdate(id int, newName string, newAge int) {// 准备预处理语句stmt, err := db.Prepare("UPDATE usertest SET name=?, age=? WHERE id=?")if err != nil {fmt.Printf("prepare failed, err:%v\n", err)return}defer stmt.Close()// 执行预处理语句result, err := stmt.Exec(newName, newAge, id)if err != nil {fmt.Printf("exec failed, err:%v\n", err)return}// 检查影响行数rowsAffected, err := result.RowsAffected()if err != nil {fmt.Printf("get rows affected failed: %v\n", err)return}fmt.Printf("更新成功,影响%d行\n", rowsAffected)
}func main() {err := initDB()if err != nil {fmt.Printf("init db failed,err:%v\n", err)}//insert() //增加//deleteRow(3) //删除//updateRow(89, 1) //更新//query(1) // 单行查询//queryMore(1) //多行查询preparedUpdate(1, "大姐", 66)
}

效果

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

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

相关文章

HTN77A0原理图提供聚能芯半导体禾润一级代理技术支持免费送样

在电源管理需求日益严苛的当下,禾润 HTN77A0 以卓越性能脱颖而出。它不仅适配多种应用场景,还兼具高效节能与稳定输出,为设备供能带来革新体验。 禾润 HTN77A0 同步降压变换器,凭借5V~130V 超宽输入电压范围,打破传统供…

小程序中的页面跳转

小程序中的页面跳转 在之前网页的学习中,我们往往采用超链接,或者定义方法、函数等方式来实现页面的跳转,但是微信小程序中没有超链接,那我们该如何实现呢?微信小程序的页面跳转包括两个,一个是tabBar页面…

在K8S迁移节点kubelet数据存储目录

默认k8s节点kubelet数据目录在 /var/lib/kubelet,如果在部署前没有做好规划,其实默认就存储在系统盘/分区下了,这样会导致一个问题,如果数据量过大会导致kubelet服务异常,其次,系统盘下有一些系统服务引用&…

MySQL基础关键_002_DQL(一)

目 录 一、初始化 二、简单查询 1.部分语法规则 2.查询一个字段 (1)查询员工编号 (2)查询员工姓名 3.查询多个字段 (1)查询员工编号、姓名 (2)查询部门编号、名称、位置 …

阿里云服务迁移实战: 04-IP 迁移

普通过户 如资料过户按量付费EIP所述,如果原账号是个人账号,则目标账号无限制,如果原账号是企业账号,则目标账号必须为相同认证主体的企业账号。 其主要操作就是,在原账号发起过户,在新账号接收过户。具体…

安恒安全培训实习生,CTF方向面试题!

目均模拟真实CTF赛题,需结合动态调试与工具链(pwntools/ROPgadget/one_gadget)完成利用。 覆盖栈、堆、格式化字符串、高级堆利用、沙箱逃逸五大方向,从基础ROP到House of Apple,逐步提升对抗防护的能力。 题目1&…

【C++QT】Combo Box 组合框控件详解

文章目录 一、QComboBox(Combo Box)1. 基本用法2. 特性3. 信号与槽函数 二、QFontComboBox(Font Combo Box)1. 基本用法2. 特性3. 信号与槽函数 三、总结如果这篇文章对你有所帮助,渴望获得你的一个点赞! 在…

Best Video下载器——全能高清无水印视频下载工具

在当今短视频和流媒体盛行的时代,用户经常遇到想要下载视频却受限于平台限制的情况。无论是收藏喜欢的影视片段、保存有价值的教程,还是进行二次创作,一款高效、免费且支持多平台的视频下载工具显得尤为重要。Best Video下载器正是为此而生&a…

AI音频核爆!Kimi开源“六边形战士”Kimi-Audio,ChatGPT语音版?

音频处理领域的天花板被撕开了。 刚刚,kimi 发布全新通用音频基础模型 Kimi-Audio,这款由月之暗面(Moonshot AI)推出的开源模型,在 24 小时内收获 3.2 万星标,不仅以 1.28% 词错率刷新语音识别纪录&#xf…

安装VMware虚拟机时出现报错:

如果已在 BIOS/固件设置中禁用 Intel VT-x,或主机自更改此设置后从未重新启动,则 Intel VT-x 可能被禁用。 1.解决的方法: BIOS 设置要求 为了使 VMware Workstation 支持用户级别的监控并允许模块 MonitorMode 成功启动,需确保…

基于ESP32 S3 + PVDF采集呼吸心率

压电薄膜可以采集到微动特征,压阻传感器可以采集到是否有大重量压力,利用这个特性实现类似于床带采集呼吸心率,实现生命体征检测功能 ESP32 S3 PVDF实现生命体征检测带 硬件: ESP32 S3PVDF压敏压阻涂鸦传感器(可选支…

多模态大语言模型arxiv论文略读(五十)

Pensieve: Retrospect-then-Compare Mitigates Visual Hallucination ➡️ 论文标题:Pensieve: Retrospect-then-Compare Mitigates Visual Hallucination ➡️ 论文作者:Dingchen Yang, Bowen Cao, Guang Chen, Changjun Jiang ➡️ 研究机构: 同济大学…

智能驾驶新时代:NVIDIA高级辅助驾驶引领未来出行安全

智能驾驶新时代:NVIDIA高级辅助驾驶引领未来出行安全 在全球汽车产业数字化转型的时代潮流中,高级辅助驾驶技术已逐渐成为推动产业革新的核心动力。作为这一领域的领导者之一,NVIDIA通过其先进的技术解决方案,正在积极塑造未来的…

总结小程序的坑

小程序中的wxss中 background不能使用本地图片 解决方法: 使用 Base64 编码(适合小图片)使用网络图片, 网络图片需要用https用 image 标签替代 分包的图片主包不能使用,这是分包中的图片资源默认不能被主包或其他分包直…

供应链管理-国际结算:本币互换 / 数字货币桥 / 我国在沙特发行美债

一、本币互换 本币互换(Local Currency Swap)是指两国(或地区)的央行(货币当局)签订协议,约定在一定条件下,任何一方可以一定数量的本币交换等值的对方货币,用于双边贸易…

湖北理元理律师事务所:从法律视角看债务优化的合规实践

在债务纠纷高发的社会背景下,法律服务机构如何通过合规手段帮助债务人实现债务优化,成为公众关注的议题。湖北理元理律师事务所作为经国家司法局注册登记的债事服务机构,其服务模式与成果为行业提供了可参考的样本。 服务框架:法…

免费在Colab运行Qwen3-0.6B——轻量高性能实战

Qwen一直在默默地接连推出新模型。 每个模型都配备了如此强大的功能和高度量化的规模,让人无法忽视。 继今年的QvQ、Qwen2.5-VL和Qwen2.5-Omni之后,Qwen团队现在发布了他们最新的模型系列——Qwen3。 这次他们不是发布一个而是发布了八个不同的模型——参数范围从6亿到235…

【Java】打印运行环境中某个类引用的jar版本路径

背景 正式环境出现jar版本不匹配问题,不知道正式环境用的哪个jar版本。通过一下可以打印出类调用的jar // 获取 POIFSFileSystem 类的加载器并打印其来源路径 ClassLoader classloaderPOIFS org.apache.poi.poifs.filesystem.POIFSFileSystem.class.getClassLoade…

Python生活手册-元组:保险柜与瑞士军刀

一、元组的本质:数据世界的保险柜 Python元组就像银行金库里的​​智能保险箱​​,一旦存放物品就会自动焊死箱门。当你把结婚戒指和房产证放进保险箱后,任何人都无法替换或破坏这些物品,只能通过特定窗口查看内容。 # 创建家庭…

dameng-mcp-server达梦MCP服务

达梦数据库手写MCP服务 文件名称 server.py 源代码 参考mysql-mcp-server写的dameng数据库版本的 点击访问mysql-mcp-server的github仓库 mcp服务端 import asyncio import logging import os import sys from dmPython import connect from mcp.server import Server from mc…