一.查询注意点

  • Golang中执行查询与新增、删除、修改中stmt的执行方法有区别,由于需要把查询到的结果取出来,所以还需要进行取值处理

二.代码示例

  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("select * from people")
  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. rows,err:=stmt.Query()
  48. if err!=nil{
  49. fmt.Println("查询失败",err)
  50. }
  51. //循环遍历结果
  52. for rows.Next(){
  53. var id int
  54. var name,address string
  55. //把行内值付给变量
  56. rows.Scan(&id,&name,&address)
  57. fmt.Println(id,name,address)
  58. }
  59. defer func() {
  60. if rows!=nil{
  61. rows.Close()
  62. fmt.Println("关闭结果集")
  63. }
  64. }()
  65. }