基于go的簡單管理系統(增刪改查)

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…