Go 编程-mysql数据库操作

news/2024/9/12 19:47:17/文章来源:https://www.cnblogs.com/iruan/p/18378324

一、环境准备

在Go语言中连接MySQL数据库通常使用database/sql包配合一个MySQL驱动,比如github.com/go-sql-driver/mysql
安装github.com/go-sql-driver/mysql
go get github.com/go-sql-driver/mysql

二、连接及增删改查

package mainimport ("database/sql""fmt""log"_ "github.com/go-sql-driver/mysql"
)//连接数据库使用sql.open(),然后使用ping来测试数据库是否可用
func Connect_mysql () *sql.DB{// 数据库连接字符串 (DSN) 格式为: user:password@tcp(host:port)/dbname?charset=utf8mb4dsn := "root:root@tcp(127.0.0.1:3306)/go_study?charset=utf8mb4"db, err := sql.Open("mysql",dsn)if err!=nil {log.Println("mysql connect erro: ",err)return nil}if db.Ping()!=nil {log.Println("ping err :")return nil}fmt.Println("mysql connect success!")return db}//查询操作,使用Query,因为查询的数据会返回很多行,所以Query会返回一个sql.Rows的数据集
//为什么不使用Exec?因为exec返回的是一个result,通常是包含改变的位置信息。
func Select_(db *sql.DB) {select_sql := "select username,sex from user"rows ,er := db.Query(select_sql)if er!=nil {fmt.Println("查询失败:",er)}//查询结果的处理主要使用两个函数,rows.Next()遍历每条数据,rows.Scan()将每一条数据的信息输入进参数里面。for rows.Next(){// var id int// var emil stringvar username stringvar sex stringerro :=rows.Scan(&username,&sex) //一条数据有几个字段就要Scan几个参数进行接收if erro !=nil{fmt.Println("Rows scan err:",erro)break}fmt.Printf("username:%s sex : %s\n",username,sex)}
}
func main() {DB :=Connect_mysql()defer DB.Close()// 查询操作//插入insert_sql := "insert into user (username,sex,email) values(?,?,?)"_ , err := DB.Exec(insert_sql,"xrf","girl","110")if err !=nil {fmt.Println("插入数据失败:",err)}//查询Select_(DB)update := "update user set sex=? where username = ?"DB.Exec(update,"boy","xrf")fmt.Println("更改之后:")Select_(DB)del:= "delete from user where user_id = ?"DB.Exec(del,2)fmt.Println("删除:")Select_(DB)}

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

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

相关文章

相遇(容斥+最短路+分类,水紫)

第5题 相遇 查看测评数据信息给定一个有n个节点m条边的无向图,在某一时刻节点st上有一个动点a, 节点end上有一个动点b, 动点a向节点end方向移动,要求是尽快到达end点,与此同时,动点b向节点st方向移动,要求是尽快到达st点, 但是整个过程中a和b不能相遇,问两点不相遇一…

NYX靶机笔记

NYX靶机笔记 概述 VulnHub里的简单靶机 靶机地址:https://download.vulnhub.com/nyx/nyxvm.zip 1、nmap扫描 1)主机发现 # -sn 只做ping扫描,不做端口扫描 nmap -sn 192.168.84.1/24 # 发现靶机ip为 MAC Address: 00:50:56:E0:D5:D4 (VMware) Nmap scan report for 192.168.…

VS2022 Visual Studio Installer 一直卡在0%,或者下载速度慢的问题解决办法

vs2022 installer,安装失败的问题C:\Users\Administrator\AppData\Local\Temp到c盘查看日志,发现是下载一个叫 vs_installer.opc的东西失败了,直接复制日志里的https://aka.ms/vs/17/release/installer,下载,发现成功下载,然后放到installer安装器同级目录,重新打开setu…

[Java基础]虚拟线程

虚拟线程(Virtual Thread)是 JDK 而不是 OS 实现的轻量级线程(Lightweight Process,LWP),由 JVM 调度。许多虚拟线程共享同一个操作系统线程,虚拟线程的数量可以远大于操作系统线程的数量。 虚拟线程和平台线程有什么关系? 在引入虚拟线程之前,java.lang.Thread 包已经…

一台电脑配置两个Git账号(github和gitlab),不同仓库使用不同的git

我们工作时一般都是使用gitlab,工作电脑也一般配置的 git 是连接 gitlab 的,那么当我们如果想用同一个电脑实现不同仓库根据自己的需要到底是推送代码到github还是 gitlab,以及使用哪个账号,(比如如果想用工作电脑维护自己的 github 项目,但是怕后面被公司追究用工作电脑干…

DDD是软件工程的第一性原理?

本文书接上回《DDD建模后写代码的正确姿势》,关注公众号(老肖想当外语大佬)获取信息:最新文章更新;DDD框架源码(.NET、Java双平台);加群畅聊,建模分析、技术实现交流;视频和直播在B站。前提 本文需要以系列前文的逻辑链条和结论为前提,如果没有阅读过前文的,可以阅…

[TCP/IP]三次握手

三次握手TCP建立连接为什么需要三次握手 TCP作为一种可靠传输控制协议,其核心思想:既要保证数据可靠传输,又要提高传输的效率,而用三次恰恰可以满足以上两方面的需求! TCP可靠传输的精髓:TCP连接的一方A,由操作系统动态随机选取一个32位长的序列号(Initial Sequence Nu…

预设型 DP

预设型 DP《美好的一天》--青春学概论 한 잔 술에 취해 잠긴 목엔 沉醉于一杯酒 갈라지는 목소린 다시 带着沙哑的嗓音 두 잔 자기 전엔 기분 좋음 入睡前饮下第二杯让心情愉悦 알 수 없는 세상에 빠져 陷入不可预知的世界 세 잔 또 네 잔 술에 빠진 又沉醉于第三杯第四杯 세상…

Nginx缓存服务

Nginx缓存服务 7.1 缓存配置语法 proxy_cache 配置语法 S yntax: proxy_cache zone | off; Default: proxy_cache off; Context: http, server, location//缓存路径 Syntax: proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time…

第八周进度报告

常用API SimpleDateFormat格式化:把时间变成我们喜欢的格式 解析:把字符串表示的时间变成Date对象import java.text.SimpleDateFormat; import java.util.Date;public static void main(String[] args) throws ParseException {/*public SimpleDateFormat() //默认格式publi…

学习Java的第八周

随着24年暑假的结束,第八周的Java学习也结束了,本周主要学习了字符串,包括API简介(提供各种功能的可以直接使用的类),字符串的概述、构造实现(创建String对象的两种方式,它们的不同点)、内存分析(两种定义方式各自的内存原理)、字符串比较方法(equals和equalsIgnor…