goweb连接数据库操作
连接数据库
增加
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
//打开链接
db, err := sql.Open("mysql", "root:123456@tcp(localhost:3306)/first")
db.Ping()
defer func() {
if db != nil {
db.Close()
}
}()
if err != nil {
fmt.Println("数据库连接失败")
return
}
//预处理sql
stmt, err := db.Prepare("insert into people values(default,?,?)")
defer func() {
if stmt != nil {
stmt.Close()
}
}()
if err != nil {
fmt.Println("预处理失败")
return
}
result, err := stmt.Exec("张三", "大海")
if err != nil {
fmt.Println("sql失败")
return
}
//获取结果
count, err := result.RowsAffected()
if err != nil {
fmt.Println("获取结果失败")
return
}
if count > 0 {
fmt.Println("新增成功")
} else {
fmt.Println("新增失败")
}
//可能需要获取新增时主键的值
id, _ := result.LastInsertId()
fmt.Println(id)
}
修改
修改和新增类似,只是不需要获取LastInsertId()和Sql语句是修改语句
在Golang中要求:如果修改前和修改后的值相同,RowAffected()返回0,即修改失败
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
db, _ := sql.Open("mysql", "root:123456@tcp(localhost:3306)/first")
defer func() {
if db != nil {
db.Close()
}
}()
stmt, _ := db.Prepare("update people set name = ? where id = ?")
defer func() {
if stmt != nil {
stmt.Close()
}
}()
result, _ := stmt.Exec("李四", 2)
count, _ := result.RowsAffected()
if count > 0 {
fmt.Println("修改成功")
} else {
fmt.Println("修改失败")
}
}
删除
删除和修改,新增结构一样
在Go语言中要求如果要删除的数据不存在,RowsAffected()返回0
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
db, _ := sql.Open("mysql", "root:123456@tcp(localhost:3306)/first")
defer func() {
if db != nil {
db.Close()
}
}()
stmt, err := db.Prepare("delete from people where id = 3")
if err != nil {
fmt.Println("预处理出错")
}
defer func() {
if stmt != nil {
stmt.Close()
}
}()
result, err := stmt.Exec()
if err != nil {
fmt.Println("执行失败")
return
}
count, _ := result.RowsAffected()
if count > 0 {
fmt.Println("删除成功")
} else {
fmt.Println("删除失败")
}
}
数据查询
Golang中执行查询与增删改中stmt的执行方法有区别,由于需要把查询的结果取出来,所以还需要进行取值处理
执行查询Sql时,stmt调用的是Query()方法
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
db, err := sql.Open("mysql", "root:123456@tcp(localhost:3306)/first")
if err != nil {
fmt.Println("连接失败")
return
}
defer func() {
if db != nil {
db.Close()
}
}()
stmt, err := db.Prepare("select * from people")
if err != nil {
fmt.Println("预处理失败")
return
}
defer func() {
if stmt != nil {
stmt.Close()
}
}()
rows, err := stmt.Query()
if err != nil {
fmt.Println("获取结果失败")
return
}
defer func() {
if rows != nil {
rows.Close()
}
}()
var id int
var name, adderss string
for rows.Next() {
rows.Scan(&id, &name, &adderss)
fmt.Println(id, name, adderss)
}
}