Go語言對于MySQL的基本操作

一.下載依賴

終端中輸入:

go get -u github.com/go-sql-driver/mysql

導入包

import ("database/sql"_ "github.com/go-sql-driver/mysql"
)

?

二.案例

package main//go get-u github.com/go-sql-driver/mysql  獲取驅動
import ("database/sql""fmt"_ "github.com/go-sql-driver/mysql"
)var db *sql.DB
//根據數據庫表中,有屬性id,name,age,且id為插入時,自增1
var usergroup map[int]user = make(map[int]user, 100)type user struct {id   intname stringage  int
}func initDB() (err error) {//連接數據庫dsn := "root:9826942694yzy@tcp(127.0.0.1:3306)/sql_test"db, err = sql.Open("mysql", dsn) //dsn格式不對這里會報錯if err != nil {fmt.Printf("dsn: %s invaid! err:%v\n", dsn, err)return err}//判斷一下是否連接成功err = db.Ping()if err != nil {fmt.Printf("open %s failed! err:%v\n", dsn, err)return err} else {fmt.Printf("open %s success!\n", dsn)}//設置數據庫連接池的最大連接數,根據業務調整db.SetMaxOpenConns(10)db.SetMaxIdleConns(5) //最大閑置連接數return nil
}// 輸入id,返回對應的user信息  查詢單條記錄
func queryOne(id int) (u user, err error) {//查詢單條語句sqlstr := "select * from user where id=?" //?為占位符,在Query的時候可以用后續的參數進行填充rowObj := db.QueryRow(sqlstr, id)         //從數據庫連接池中拿去一個連接去進行查詢//得到了rowObj必須調用Scan方法,因為該方法會釋放數據庫連接,把連接放回連接池,否則連接池最大連接用完,則會影響后續連接查詢rowObj.Scan(&u.id, &u.name, &u.age)if rowObj == nil {fmt.Printf("query failed,err:%v\n", err)return u, err}return u, nil
}// 查詢多行  讀取到map中
func query() (err error) {sqlstr := "select * from user"rows, err := db.Query(sqlstr)if err != nil {fmt.Printf("query failed,err:%v\n", err)return}//記得關閉,放回連接池defer rows.Close()var u user//用一個for循環,把每次讀到的行信息,存放到全局變量usergroup中,達到程序啟動初始化的效果for rows.Next() {err = rows.Scan(&u.id, &u.name, &u.age)if err != nil {fmt.Printf("scan failed,err:%v\n", err)return}usergroup[u.id] = u}return nil
}// 插入一條學生數據,并且更新map  id是主碼,
//實際插入學生數據的時候,并不知道數據庫中學號應該分配多少,所以在插入后得到返回的id,再更新map
func insert(u user) (id int64, err error) {sqlstr := "insert into user(name,age) values(?,?)"var res sql.Result//執行該語句res, err = db.Exec(sqlstr, u.name, u.age)if err != nil {fmt.Printf("insert failed,err:%v\n", err)return}//拿到插入的id,返回id, err = res.LastInsertId()if err != nil {fmt.Printf("insert failed,err:%v\n", err)return}return id, nil
}//刪除指定id的user,實際上最好判斷一下是否存在map中,這里就先不寫了
func deleteUser(id int) (err error) {sqlstr := "delete from user where id=?"_, err = db.Exec(sqlstr, id)if err != nil {fmt.Printf("delete failed,err:%v\n", err)return err}delete(usergroup, id)return nil
}// 查詢單條語句
func test01() {//查詢學號為1的學生信息u, err := queryOne(1)if err != nil {fmt.Printf("query failed,err:%v\n", err)return}println(u.id, u.name, u.age)}// 程序初始化時,把user表中信息全部讀取到map中
func readToMap() {//從數據庫中讀取user放入map中err := query()if err != nil {fmt.Printf("query failed,err:%v\n", err)return}
}// 測試插入
func myInsertTest() {var u useru.age = 23u.name = "周杰倫"id, err1 := insert(u)if err1 != nil {fmt.Printf("insert failed,err:%v\n", err1)return}//說明插入成功u.id = int(id)usergroup[u.id] = u
}//遍歷map
func printMap() {//遍歷for _, u := range usergroup {println(u.id, u.name, u.age)}println("***************************************")
}func main() {err := initDB()defer db.Close()if err != nil {fmt.Printf("init db failed,err:%v\n", err)return}readToMap()printMap()myInsertTest()printMap()}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72388.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72388.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72388.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux與深入HTTP序列化和反序列化

深入HTTP序列化和反序列化 本篇介紹 在上一節已經完成了客戶端和服務端基本的HTTP通信,但是前面的傳遞并沒有完全體現出HTTP的序列化和反序列化,為了更好得理解其工作流程,在本節會以更加具體的方式分析到HTTP序列化和反序列化 本節會在介紹…

基于Python+SQLite實現(Web)驗室設備管理系統

實驗室設備管理系統 應用背景 為方便實驗室進行設備管理,某大學擬開發實驗室設備管理系統 來管理所有實驗室里的各種設備。系統可實現管理員登錄,查看現有的所有設備, 增加設備等功能。 開發環境 Mac OSPyCharm IDEPython3Flask&#xff…

深拷貝and淺拷貝!

一、什么是拷貝?什么是深拷貝和淺拷貝? (1)拷貝:拷貝就是為了復用原對象的部分or全部數據,在原對象的基礎上通過復制的方式創建一個新的對象。 拷貝對象可以分為三種類型:直接賦值、淺拷貝和深拷…

高頻面試題(含筆試高頻算法整理)基本總結回顧43

干貨分享,感謝您的閱讀! (暫存篇---后續會刪除,完整版和持續更新見高頻面試題基本總結回顧(含筆試高頻算法整理)) 備注:引用請標注出處,同時存在的問題請在相關博客留言…

《靈珠覺醒:從零到算法金仙的C++修煉》卷三·天劫試煉(34)混元金斗裝萬物 - 0-1背包問題(二維DP)

《靈珠覺醒:從零到算法金仙的C++修煉》卷三天劫試煉(34)混元金斗裝萬物 - 0-1背包問題(二維DP) 哪吒在數據修仙界中繼續他的修煉之旅。這一次,他來到了一片神秘的混元谷,谷中有一座巨大的混元金斗,斗身閃爍著神秘的光芒。谷口有一塊巨大的石碑,上面刻著一行文字:“欲…

網絡爬蟲【簡介】

我叫補三補四,很高興見到大家,歡迎一起學習交流和進步 今天來講一講視圖 一、網絡爬蟲的定義 網絡爬蟲(Web Crawler),又稱為網絡蜘蛛、網絡機器人等,是一種按照一定規則自動抓取互聯網信息的程序或腳本。它…

?AI時代到來,對電商來說是效率躍升,還是溫水煮青蛙

?凌晨三點的義烏商貿城,95后創業者小王,靜靜地盯著屏幕上的AI工具,竟露出了笑容。這個月他的跨境玩具店銷量提升了不少,從之前的狀態翻了3倍;而且團隊人數有所變化,從5人縮減到了2人(其中包括他…

PDF文件密碼保護破解:安全解密的步驟與技巧

PDF文件加密后,需要特定的密碼才能訪問內容。以下是一些常見的方法來解密PDF文件: 方法一:使用Adobe Acrobat 如果你有Adobe Acrobat Pro,可以使用它來解密PDF文件。 打開Adobe Acrobat Pro: 啟動Adobe Acrobat Pro…

qt 自帶虛擬鍵盤的編譯使用記錄

一、windows 下編譯 使用vs 命令窗口,分別執行: qmake CONFIG"lang-en_GB lang-zh_CN" nmake nmake install 如果事先沒有 指定需要使用的輸入法語言就進行過編譯,則需要先 執行 nmake distclean 清理后執行 qmake 才能生效。 …

Java開發之數據庫應用:記一次醫療系統數據庫遷移引發的異常:從MySQL到PostgreSQL的“dual“表陷阱與突圍之路

記一次醫療系統數據庫遷移引發的異常:從MySQL到PostgreSQL的"dual"表陷阱與突圍之路 一、驚魂時刻:數據庫切換引發的系統雪崩 某醫療影像系統在進行國產化改造過程中,將原MySQL數據庫遷移至PostgreSQL。遷移完成后,系…

C++刷題(二):棧 + 隊列

📝前言說明: 本專欄主要記錄本人的基礎算法學習以及刷題記錄,使用語言為C。 每道題我會給出LeetCode上的題號(如果有題號),題目,以及最后通過的代碼。沒有題號的題目大多來自牛客網。對于題目的…

精通游戲測試筆記(持續更新)

第一章、游戲測試的兩條規則 不要恐慌 不要將這次發布當作最后一次發布 不要相信任何人 把每次發布當作最后一次發布 第二章:成為一名游戲測試工程師

Windows功能之FTP服務器搭建

一、創作背景 之前有用linux系統搭建過ftp服務器,最近想著用windows系統也順便搭建一個,看網上有第三方服務軟件一鍵部署,記得windows可以不借助第三方軟件就可以搭建,就想順便操作試試,結果老是連接不上,費…

星型組網模塊的兩種交互方式優缺點解析

星型組網模塊簡介 星型組網模塊工作在433MHz頻段;星型組網模塊集主機(協調器)、終端為一體,星型組網模塊具有長距離、高速率兩種傳輸模式,一個主機(協調器)支持多達200個節點與其通訊&#xff0…

二分+前綴和——森林的最大美麗值

森林的最大美麗值(二分差分數組) 題目分析 求最小值的最大值,聯想到二分。 第一階段二段性分析 對于所有樹的高度都可以大于等于mid,那么我們可以確定高度小于mid的值一定也可以,但是此時我需要找的是最大的高度,那么mid一定比…

Pytorch實現之最小二乘梯度歸一化設計

簡介 簡介:LSGAN提出了一種利用最小二乘法來計算兩個數據分布之間的距離,該論文在此基礎上采用梯度歸一化來進一步穩定訓練。 論文題目:LSN-GAN: A Novel Least Square Gradient Normalization for Generative Adversarial Networks(LSN-GAN:一種新的生成對抗網絡的最小…

JavaScript基礎-全局作用域

在JavaScript編程中,理解變量的作用域是編寫高效、可維護代碼的關鍵之一。全局作用域是指變量在整個程序范圍內都可訪問的狀態,這意味著它們可以在任何函數或代碼塊中被讀取和修改。然而,過度使用全局變量也可能導致一些問題,如命…

【2025.3.13】記一次雙系統筆記本加裝固態硬盤記錄 linux擴容 linux更換/home和/opt所在硬盤 windows無法調整亮度

文章目錄 🌕事情經過🌕更換/home和/opt的掛載硬盤🌙目的🌙初始化1t固態硬盤🌙打開Linux查看硬盤信息🌙給新1t固態硬盤分區🌙格式化分區🌙把新1t固態硬盤先掛載到/mnt/ssd_1t 用于后續…

山東省新一代信息技術創新應用大賽-計算機網絡管理賽項(樣題)

目錄 競賽試題 網絡拓撲 配置需求 虛擬局域網 IPv4地址部署 OSPF及路由部署 配置合適的靜態路由組網 MSTP及VRRP鏈路聚合部署 IPSEC部署 路由選路部署 設備與網絡管理部署 1.R1 2.R2 3.S1 4.S2 5.S3 競賽試題 本競賽使用HCL(華三云實驗室)來進行網絡設備選擇…

【測試語言基礎篇】Python基礎之List列表

一、Python 列表(List) 序列是Python中最基本的數據結構。序列中的每個元素都分配一個數字 - 它的位置,或索引,第一個索引是0,第二個索引是1,依此類推。 Python有6個序列的內置類型,但最常見的是列表和元組。序列都可…