nawawa001 发表于 2017-12-12 18:36:15

go database/sql sql-driver/mysql 操作

func main (){//insert  name := "name"
  pwd := "password"
  nickname := "nickname"
  db,err := sql.Open("mysql","go_mysql_user:go_mysql_pwd@tcp(localhost:3306)/go_mysql?")
  if err != nil{
  panic(err.Error())
  log.Println(err)
  return
  }
  defer db.Close()//只有在前面用了 panic[抛出异常] 这时defer才能起作用,如果链接数据的时候出问题,他会往err写数据。defer:延迟,这里立刻申请了一个关闭sql 链接的草错,defer 后的方法,或延迟执行。在函数抛出异常一会被执行
  insert_sql := "insert into users (name,pwd,nickname) value (?,?,?),(?,?,?),(?,?,?),(?,?,?)"
  stmt,err := db.Prepare(insert_sql)      //准备一个sql操作,返回一个*Stmt,用户后面的执行,这个Stmt可以被多次执行,或者并发执行
  /*
  *    这个stmt的主要方法:Exec、Query、QueryRow、Close
  */
  if err != nil {
  log.Println(err)
  return
  }
  res,err := stmt.Exec(name,pwd,nickname,name,pwd,nickname,name,pwd,nickname,name,pwd,nickname)
  if err != nil {
  log.Println(err)
  return
  }
  lastInsertId,err := res.LastInsertId()      //批量插入的时候LastInserId返回的是第一条id,单条插入则返回这条的id
  //lastInsertId,err := res.RowsAffected()      //插入的是后RowsAffected 返回的是插入的条数
  if err != nil {
  log.Println(err)
  return
  }
  //log.Println(reflect.TypeOf(lastInsertId))    //打印变量类型
  last_insert_id_string := strconv.FormatInt(lastInsertId,10)    //int64 转string 需要引入 strconv包
  log.Println("lastInsertId = " + last_insert_id_string)
  
}
页: [1]
查看完整版本: go database/sql sql-driver/mysql 操作