一. 修改注意点

  • 修改和新增类似,只是不需要获取LastInsertId()和SQL语句是修改语句
  • 在Golang中要求:如果修改前和修改后的值相同,RowsAffected()返回0

二.代码实现

  1. package main
  2. import (
  3. "fmt"
  4. //驱动已经放入到标准库文件夹,由于不使用所以需要空导入,在前面添加_
  5. _ "github.com/go-sql-driver/mysql"
  6. //Golang中数据库操作包
  7. "database/sql"
  8. )
  9. func main() {
  10. /*
  11. 第一个参数:连接什么数据库
  12. 第二个参数:连接字符串
  13. 语法:数据库登录用户名:密码@tcp(mysql主机ip:端口)/database名称
  14. */
  15. db,err:=sql.Open("mysql","root:root@tcp(localhost:3306)/first")
  16. db.Ping()
  17. //Error处理
  18. if err!=nil{
  19. fmt.Println("数据库连接失败")
  20. }
  21. //关闭连接
  22. defer func() {
  23. if db!=nil{
  24. db.Close()
  25. fmt.Println("关闭连接")
  26. }
  27. }()
  28. /*
  29. 准备处理SQL语句
  30. 支持占位符,防止SQL注入
  31. */
  32. stmt,err:=db.Prepare("update people set name=?,address=? where id=?")
  33. //错误处理
  34. if err!=nil{
  35. fmt.Println("预处理失败",err)
  36. }
  37. //关闭对象
  38. defer func() {
  39. if stmt!=nil{
  40. stmt.Close()
  41. fmt.Println("stmt关闭")
  42. }
  43. }()
  44. /*
  45. Exec() 参数为不定项参数,对应占位符?个数
  46. */
  47. res,err:=stmt.Exec("李四","朝阳",1)
  48. //错误处理
  49. if err!=nil{
  50. fmt.Println("执行SQL出现错误")
  51. }
  52. //受影响行数
  53. count,err:=res.RowsAffected()
  54. if err!=nil{
  55. fmt.Println("获取结果失败",err)
  56. }
  57. if count>0{
  58. fmt.Println("修改成功")
  59. }else{
  60. fmt.Println("修改失败")
  61. }
  62. }