mysql"/>
go mysql
标题
// sql.Open 返回二个值:1.数据操作 2.语法正确与否
// db.QueryRow 查找一条数据
// scan 可以返回一个错误信息
// rows.Next() bool类型 查到信息返回true 配合for使用
文章目录
- 标题
- // sql.Open 返回二个值:1.数据操作 2.语法正确与否
- // db.QueryRow 查找一条数据
- // scan 可以返回一个错误信息
- // rows.Next() bool类型 查到信息返回true 配合for使用
- 1.连接数据库 sql.Open()
- 2.查询单条语句 db.QueryRow()
- 2.1 查询多条 db.query 他的scan没有关闭连接池功能
- ----------------------------------------示例代码:
- 三, 插入,更新,删除 使用的是一个方法 db.Exec()
- 插入
- 删除
- 更改
1.连接数据库 sql.Open()
1.下载
go get -u github/go-sql-driver/mysql
2.全部代码
package mainimport ("database/sql""fmt"_ "github/go-sql-driver/mysql" //导入
)func main() {dsn := "账号:密码@tcp(ip:3306)/库名称"db, err := sql.Open("mysql", dsn) // 查看dsn语法有没有问题if err != nil {fmt.Println(db, err)return}errs := db.Ping() //db.Ping() 尝试连接 :成功 errs显示nilfmt.Println(errs)
}
func initdb() (err error) {db, err = sql.Open("mysql", "admin:admin@tcp(43.138.57.471:3306)/test") //给db全局空指针 传连接成功的值errs := db.Ping() return errs
}
2.查询单条语句 db.QueryRow()
type user struct {name stringage intsex string
}
func queryOne(name int) {var u1 user //结构体对象//第一种写法 1.搜索出来 2.利用scan !nil 扫描传值 并关闭// data := db.QueryRow("select name,age from feixiang where name = 1")// data.Scan(&u1.name, &u1.age) // &:指针 没有&指针 改不了u1 原始值 改的是临时u1// fmt.Println(u1)//第二种写法 1.搜索出来 直接利用scan赋值 并返回连接池sqlStr := `select name,age,sex from feixiang where name = ?`// &:指针 没有&指针 改不了u1 原始值 改的是临时u1db.QueryRow(sqlStr, name).Scan(&u1.name, &u1.age, &u1.sex) fmt.Printf("u1:%#v", u1) //加#号 可以打印出来 对象}
2.1 查询多条 db.query 他的scan没有关闭连接池功能
//查询多条 db.query
func queryMore(name int) {sqlStr := `select name,IFNULL(age, 0),IFNULL(sex, 0) from feixiang where name > ?`rows, err := db.Query(sqlStr, name)// 记得用完关闭连接池defer rows.Close()//如果有错 就打印出错误if err != nil {fmt.Println("查询多条 出错:%v", err)return}// rows.Next() 一条 一条 来//循环取值赋值for rows.Next() {var u1 user// scan 赋值err := rows.Scan(&u1.name, &u1.age, &u1.sex)//如果有错 就打印出错误if err != nil {fmt.Println("循环取值报错", err)}fmt.Println(u1)}
}
----------------------------------------示例代码:
package mainimport ("database/sql""fmt"_ "github/go-sql-driver/mysql"
)var db *sql.DBtype user struct {name stringage intsex string
}func initDB() (err error) {//连接数据库db, err = sql.Open("mysql", "admin:admin@tcp(43.138.57.XX:3306)/test")//判断语法错误if err != nil {fmt.Println("数据库语法错误")return}// 判断连接成功与否errs := db.Ping()if errs == nil {fmt.Println("连接成功")}return
}// 查询一条数据
func selectOne() {sqlStr := `select * from feixiang`var u1 user//扫描赋值并且关闭db.QueryRow(sqlStr).Scan(&u1.name, &u1.age, &u1.sex)fmt.Println(u1)
}
func selectMore() {sqlStr := `select * from feixiang`var u1 user//扫描赋值并且关闭rows, err := db.Query(sqlStr)defer rows.Close()//如果有错 就打印出错误if err != nil {fmt.Println("查询多条 出错:%v", err)return}for rows.Next() {rows.Scan(&u1.name, &u1.age, &u1.sex)fmt.Println(u1)}
}func main() {initDB()selectMore()selectOne()
}
三, 插入,更新,删除 使用的是一个方法 db.Exec()
1.res.LastInsertId() // 插入使用 插入几条
2.res.RowsAffected() // 更新删除使用 操作影响的行数
插入
func insert (){sqlStr := `insert into feixiang (name,age,sex) values ('1','2','3')`db.exec(sqlStr)
}
删除
func insert (){sqlStr := `delete from feixiang where id = 6`db.exec(sqlStr)
}
更改
func insert (){sqlStr := `update feixiang set name = 1 where id = 10`db.exec(sqlStr)
}
------------- 插入,更新,删除 实例:
func insert() {sqlStr := `insert into feixiang(name,age,sex) values('a','1001','c')`res, err := db.Exec(sqlStr)if err != nil {fmt.Println("插入失败")} else {res, err := res.LastInsertId()fmt.Println(res)fmt.Println(err)}
更多推荐
go mysql
发布评论