今天的重点就是这个函数
func (db *DB) Prepare(query string) (*Stmt, error) {
return db.PrepareContext(context.Background(), query)
}
给定mysql_stmt_init()返回的语句句柄,stmt是mysql的一个语法,批量处理多条命令
func prepareInsertDemo() {
sqlstr :="insert into user(name,age) values(?,?)"
stmt,err :=DB.Prepare(sqlstr)
if err!=nil{
fmt.Println("预处理失败")
return
}
defer stmt.Close()
for i:=10;i<20;i++{
name:=fmt.Sprintf("stu%02d",i)
stmt.Exec(name,i)
}
}
具体的执行流程是DB.Prepare(sqlstr)处理没有参数的sql
stmt.Exec(name,i)将参数传递给sql
查询多条的预处理
func prepareQueryDemo() {
sqlstr :="select id,name,age from user where id=?"
stmt,err :=DB.Prepare(sqlstr)
if err!=nil{
fmt.Println("预处理失败")
return
}
defer stmt.Close()
for i:=21;i<30;i++{
rows,err :=stmt.Query(i)
if err!=nil{
fmt.Printf("err:",err)
//continue
}
fmt.Printf("%v",err)
defer rows.Close()
for rows.Next() {
var u User
err := 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:%s\n", u.id, u.name, u.age)
}
}
}
实际上和普通的查询时类似的,不同点就在于
stmt 和DB
下一篇文章讲解一下go语言操作mysql的事务