关于golang database_sql 包
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了关于golang database_sql 包,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2232字,纯文字阅读大概需要4分钟。
内容图文
![关于golang database_sql 包](/upload/InfoBanner/zyjiaocheng/871/1e1d538263674910a0a49d22e7429d02.jpg)
golang中的标准库database/sql 包为SQL和类SQL数据库的操作提供了通用的接口。
database/sql 包 必须与数据库driver 配套使用。
目前已有的SQL database drivers 见链接。
这里面就包括比较常用的MySQL driver go-sql-driver/mysql 。
database/sql 包的设计可以说是很巧妙。
它对于上层应用提供了标准的API接口,对下层驱动driver暴露了简单的驱动接口。
并且实现了连接池的管理。这意味着,不同数据库的驱动只需要实现驱动接口,不需要关心连接池的实现细节。
常用的API操作接口
连接数据库
db, err := sql.Open(driver, dataSourceName)
连接MySQL,这里driver就是"mysql".
dataSourceName 定义了具体的连接参数。
执行SQL
ExecContext 常用执行没有rows返回的场景。
例如新建、删除
result, err := db.ExecContext(ctx,
"INSERT INTO users (name, age) VALUES ($1, $2)",
"gopher",
27,
)
QueryContext 常用于查询数据集rows。
例如,查询select
rows, err := db.QueryContext(ctx, "SELECT name FROM users WHERE age = $1", age)
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var name string
if err := rows.Scan(&name); err != nil {
log.Fatal(err)
}
fmt.Printf("%s is %d\n", name, age)
}
if err := rows.Err(); err != nil {
log.Fatal(err)
}
QueryRowContext 用于查询一条记录。
var age int64
err := db.QueryRowContext(ctx, "SELECT age FROM users WHERE name = $1", name).Scan(&age)
Prepared statements可以防止sql注入。
age := 27
stmt, err := db.PrepareContext(ctx, "SELECT name FROM users WHERE age = $1")
if err != nil {
log.Fatal(err)
}
rows, err := stmt.Query(age)
// process rows
在一个statements上,也可以执行ExecContext, QueryContext and QueryRowContext 。
statements使用完后,需要Close。
事务Transactions
可以使用以下方式开始一个事务Transactions:
tx, err := db.BeginTx(ctx, nil)
if err != nil {
log.Fatal(err)
}
在一个事务Transactions上,可以执行ExecContext, QueryContext, QueryRowContext 以及PrepareContext。
一个Transactions的结束,或者调用 Commit 或者调用 Rollback。
NULL的处理
sql.NullString 类型可用于处理字段值为NULL的情况。
如果name字段值可能为null,可以这样处理:
var name sql.NullString
err := db.QueryRowContext(ctx, "SELECT name FROM names WHERE id = $1", id).Scan(&name)
...
if name.Valid {
// use name.String
} else {
// value is NULL
}
标准库 database/sql 目前支持NullBool, NullFloat64, NullInt64, NullInt32, NullString and NullTime 。
参考
内容总结
以上是互联网集市为您收集整理的关于golang database_sql 包全部内容,希望文章能够帮你解决关于golang database_sql 包所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。