首页 > 数据库技术 > 详细

Go语言之操作数据库CRUD

时间:2020-03-02 15:48:51      阅读:70      评论:0      收藏:0      [点我收藏+]
  1 package main
  2 
  3 import (
  4     "database/sql"
  5     "fmt"
  6     _ "github.com/go-sql-driver/mysql"
  7 )
  8 
  9 // 定义一个全局对象db
 10 var db *sql.DB
 11 //定义结构体
 12 type User struct {
 13     Id   int
 14     Name string
 15     Age  int
 16 }
 17 
 18 //初始化数据库
 19 func InitDB() (err error) {
 20     //连接数据库
 21     dsn := "root:root@tcp(127.0.0.1:3306)/db3"
 22     db, err = sql.Open("mysql", dsn)
 23     //错误处理
 24     if err != nil {
 25         return err
 26     }
 27     //检验dsn是否正确
 28     err = db.Ping()
 29     if err != nil {
 30         return err
 31     }
 32     return nil
 33 }
 34 
 35 //数据库单行查询
 36 func queryRowDemo() {
 37     //创建User对象
 38     var u User
 39     //sql语句
 40     sqlStr := "select * from user where id=?"
 41     //调用QueryRow方法返回查询的一行,后边调用的scan方法是将查询出来的行放入指定的参数中
 42     err := db.QueryRow(sqlStr, 1).Scan(&u.Id, &u.Name, &u.Age)
 43     if err != nil {
 44         fmt.Println(err)
 45         return
 46     }
 47     fmt.Println(u.Id, u.Name, u.Age)
 48 }
 49 
 50 //查询多行
 51 /*
 52 查询多行和查询单行的不同之处是调用方法query并返回多行
 53 然后通过for循环调用scan方法吧每一行循环遍历出来
 54 */
 55 func queryDemo() {
 56     //sql语句
 57     sqlStr := "select * from user"
 58     //调用方法
 59     rows, err := db.Query(sqlStr)
 60     //错误处理
 61     if err != nil {
 62         fmt.Println(err)
 63     }
 64     //关闭rows释放持有的数据库链接
 65     defer rows.Close()
 66     //使用for循环进行结果的读取
 67     for rows.Next() {
 68         var u User
 69         err := rows.Scan(&u.Id, &u.Name, &u.Age)
 70         if err != nil {
 71             fmt.Println(err)
 72         }
 73         fmt.Printf("id:%d name:%s age:%d\n", u.Id, u.Name, u.Age)
 74     }
 75 }
 76 
 77 //插入数据
 78 func InsertDemo() {
 79     //sql语句
 80     sqlStr := "insert into user(name,age) value(?,?)"
 81     //Exec执行一次命令(包括查询、删除、更新、插入等),返回的Result是对已执行的SQL命令的总结。参数args表示query中的占位参数
 82     ret, err := db.Exec(sqlStr, "赵六", 30)
 83     if err != nil {
 84         fmt.Println(err)
 85         return
 86     }
 87     fmt.Println(ret)
 88     // 新插入数据的id是theID
 89     theID, err := ret.LastInsertId()
 90     if err != nil {
 91         fmt.Printf("get lastinsert ID failed, err:%v\n", err)
 92         return
 93     }
 94     fmt.Printf("insert success, the id is %d.\n", theID)
 95 }
 96 
 97 //更新数据
 98 func UpdateDemo() {
 99     sqlStr := "update user set age=? where id =?"
100     ret, err := db.Exec(sqlStr, 39, 3)
101     if err != nil {
102         fmt.Printf("update failed, err:%v\n", err)
103         return
104     }
105     n, err := ret.RowsAffected() // 操作影响的行数
106     if err != nil {
107         fmt.Printf("get RowsAffected failed, err:%v\n", err)
108         return
109     }
110     fmt.Printf("update success, affected rows:%d\n", n)
111 }
112 
113 //删除数据
114 func DeleteDemo() {
115     sqlStr := "delete from user where id=?"
116     ret, err := db.Exec(sqlStr, 4)
117     if err != nil {
118         fmt.Println(err)
119         return
120     }
121     n, err := ret.RowsAffected()
122     if err != nil {
123         fmt.Printf("get RowsAffected failed, err:%v\n", err)
124         return
125     }
126     fmt.Printf("delete success, affected rows:%d\n", n)
127 
128 }
129 func main() {
130     //调用初始化函数
131     err := InitDB()
132     if err != nil {
133         fmt.Println(err)
134     }
135     //调用函数
136     //queryRowDemo()
137     //queryDemo()
138     //InsertDemo()
139     //UpdateDemo()
140     //DeleteDemo()
141 }

 

Go语言之操作数据库CRUD

原文:https://www.cnblogs.com/yh2924/p/12395941.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!