golang操作mysql数据库
代码: mysql的增、删、改、查
package main
import (
"database/sql"
"fmt"
"strconv"
"time"
_ "github.com/go-sql-driver/mysql"
)
func main() {
db, err := sql.Open("mysql", "root:Admin!1234@tcp(10.99.2.153:3306)/xes_nrcp?charset=utf8")
defer db.Close()
checkErr(err)
//插入数据
insert(21, db)
//删除数据
delete(14, db)
//更新数据
update(15, "设计部门", db)
//查询数据
get(db)
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
func get(db *sql.DB) {
rows, _ := db.Query("SELECT * FROM aaa_test")
cloumns, _ := rows.Columns()
//获取列字段
for _, cloumn := range cloumns {
fmt.Print(cloumn + " ")
}
fmt.Println()
//遍历返回结果
for rows.Next() {
rows.Scan(&cloumns[0], &cloumns[1], &cloumns[2], &cloumns[3])
fmt.Println(cloumns[0], cloumns[1], cloumns[2], cloumns[3])
}
}
func insert(id int, db *sql.DB) {
//插入数据方式
stmt, _ := db.Prepare("INSERT aaa_test SET id=?,nameA=?,descA=?")
res, _ := stmt.Exec(id, "研发部门", "2012-12-09", time.Now())
resID, _ := res.LastInsertId()
fmt.Println(resID)
//or
// stmt, _ := db.Prepare("INSERT aaa_test (id,nameA,descA,createTime)values (?,?,?,?)")
// res, _ := stmt.Exec(17, "研发部门", "2012-12-09", time.Now())
// id, _ := res.LastInsertId()
// fmt.Println(id)
//or
// res, _ := db.Exec("INSERT aaa_test (id,nameA,descA)values (?,?,?)", 18, "研发部门", "2012-12-09")
// id, _ := res.LastInsertId()
// fmt.Println(id)
//or
// db.Exec("INSERT aaa_test (id,nameA,descA,createTime)values (?,?,?,?)", 14, "qwe", "2012-12-09", time.Now())
//or
//db.Exec("INSERT aaa_test SET id=?,nameA=?,descA=?,createTime=?", id, "研发部门", "写写代码", time.Now())
}
func delete(id int, db *sql.DB) {
stmt, err := db.Prepare("delete from aaa_test where id=?")
checkErr(err)
res, err := stmt.Exec(id)
checkErr(err)
affect, err := res.RowsAffected()
checkErr(err)
fmt.Println("删除数据影响行数:" + strconv.FormatInt(affect, 10))
}
func update(id int, name string, db *sql.DB) {
stmt, err := db.Prepare("update aaa_test set nameA=? where id=?")
checkErr(err)
res, err := stmt.Exec(name, id)
checkErr(err)
affect, err := res.RowsAffected()
checkErr(err)
fmt.Println(affect)
}
sql.Open()函数用来打开一个注册过的数据库驱动,go-sql-driver中注册了mysql这个数据库驱动,第二个参数是DSN(Data Source Name),它是go-sql-driver定义的一些数据库链接和配置信息。它支持如下格式:
user@unix(/path/to/socket)/dbname?charset=utf8
user:password@tcp(localhost:5555)/dbname?charset=utf8
user:password@/dbname
user:password@tcp([de:ad:be:ef::ca:fe]:80)/dbname
db.Prepare()函数用来返回准备要执行的sql操作,然后返回准备完毕的执行状态。
db.Query()函数用来直接执行Sql返回Rows结果。
stmt.Exec()函数用来执行stmt准备好的SQL语句
可以看到我们传入的参数都是=?对应的数据,这样做的方式可以一定程度上防止SQL注入。
如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!
txttool.com 说一段 esp56物联 查询128 IP查询