go语言学习笔记(三)

go语言连接MySQL数据库
数据库的基本操作函数

Open() – creates a DB
Close() - closes the DB
Query() - 查询
QueryRow() -查询行
Exec() -执行操作,update,insert,delete
Next() -下一个数据
Scan() -单个数据

连接数据库的包

"database/sql"
_"github.com/mysql"

我们导入github.com/go-sql-driver/mysql 前面用了一个"_",代表是引入该包,但是不直接使用包里面的函数,仅仅调用了该包里面的init函数,初始化包里面里面的变量。

连接数据库实例

import (
	"database/sql"
	_ "github.com/go-sql-driver/mysql"
	“log”
)

var db *sql.DB

func ConnectSql() []byte{
	db, err := sql.Open("mysql", "user:pass@tcp(ip:port)/database")
	if err != nil{
		return []byte("open mysql error")
	}
	defer db.Close()
	err = db.Ping()
	if err != nil{
		return []byte("connect is invalid")
	}
	return []byte("open mysql")
}

sql.DB被设计成长连接类型,不需要频繁open和close,此时我们需要建立一个全局的var db *sql.DB,当需要使用数据库是只需传递db就可以了。
当open一个数据库时并不能判断此连接的有效性,需要使用Ping()查看连接是否有效。

数据库操作
数据库查询有两种方式

rows, err := db.Query("SELECT * FROM user WHERE gid = 1")
rows, err := db.Query("SELECT * FROM user WHERE gid = ?", 1)

第一种情况下参数是拼接好的sql语句,第二种情况是第一参数是带有占位符的sql,第二个参数为sql的实际参数。
当sql语句存在占位符时可以用prepared实现sql语句的书写,执行方式如下:
1、准备prepare语句
2、执行prepared语句和参数
3、关闭prepared语句
此种执行方式有两点好处:
1、避免通过引号组装拼接sql语句带来的安全风险
2、可以多次执行sql语句
执行示例
exec()执行操作update,insert,delete

stmt, err := db.Prepare("insert into user(name,age)values(?,?)")
if err != nil {
    log.Println(err)
}
result, err := stmt.Exec("testname", testage)
if err != nil {
    log.Println(err)
}

普通查询Query()

rows, err := db.Query("select name,age from user where id = ? ", 1)
    if err != nil {
        fmt.Println(err)
    }
    defer rows.Close()            //此处一定要将rows释放

next(),逐个去打印查询出的每一个name

for rows.Next() {
        err := rows.Scan(&name, &age)
        if err != nil {
            fmt.Println(err)
        }
    }

单行查询QueryRow(),err在scan之后才会出现

err = db.QueryRow("select name from users where id = ?", 1).Scan(&name)
if err != nil {
    log.Fatal(err)
}
fmt.Println(name)

当出现空值时

if name.Valid {
        // name value
} else {
        // name value is null
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值