当前位置: 首页 > news >正文

基于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)
}

效果

相关文章:

  • Sehll编程的函数于数组
  • nacos和redis本地启动
  • 黑群晖Moments视频无缩略图,安装第三方ffmpeg解决
  • 搭建PCDN大节点,服务器该怎么配
  • 企业微信jdk 授权 记录
  • SVTAV1源码-set_all_ref_frame_type
  • Mysql之数据库基础
  • 用TCP实现服务器与客户端的交互
  • python爬虫基础:requests库详解与案例
  • Microsoft Entra ID 免费版管理云资源详解
  • Vue:el-table-tree懒加载数据
  • Kaggle比赛入门攻略(以 Titanic 为例)
  • 【KWDB 创作者计划】_深度解析KWDB存储引擎
  • C++负载均衡远程调用学习之基础TCP服务
  • 如何做表征对齐?
  • 艺术与科技的双向奔赴——高一鑫荣获加州联合表彰
  • C# 类的基本概念(从类的内部访问成员和从类的外部访问成员)
  • PXI总线开关卡80个交叉点组成的中密度 PXI矩阵开关模块
  • WPF框架中常用算法
  • BT137-ASEMI机器人功率器件专用BT137
  • 扬州市中医院“药膳面包”走红,内含党参、黄芪等中药材
  • 住房和城乡建设部办公厅主任李晓龙已任部总工程师
  • 游客曝九寨沟打网约车被出租车围堵,官方:前者违规,后者做法不对
  • 招行一季度净利372.86亿降2.08%,营收降逾3%
  • 总书记考察的上海“模速空间”,是一个怎样的空间?
  • 铁路五一假期运输今日启动,预计发送旅客1.44亿人次