使用 Go 语言的 database/sql 库操作数据库

2023-08-21 13:37:56 浏览数 (2)

Go语言中的database/sql库提供了一套通用的接口来与SQL数据库进行交互。以下内容将详细介绍如何使用这个库。

1. 引入驱动

首先,你需要导入合适的数据库驱动。例如,要操作MySQL数据库,你需要以下导入:

代码语言:javascript复制
import (
  "database/sql"
  _ "github.com/go-sql-driver/mysql"
)

注意,此处的_表示我们导入但不直接使用该包,仅初始化其侧效应。

2. 建立连接

使用sql.Open函数建立与数据库的连接:

代码语言:javascript复制
db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname")
if err != nil {
    log.Fatal(err)
}
defer db.Close()

3. 执行查询

使用QueryQueryRow执行SQL查询:

代码语言:javascript复制
rows, err := db.Query("SELECT id, name FROM users")
if err != nil {
  log.Fatal(err)
}
defer rows.Close()
4. 处理结果

使用Rows对象的Scan方法提取查询结果:

代码语言:javascript复制
for rows.Next() {
  var id int
  var name string
  err := rows.Scan(&id, &name)
  if err != nil {
    log.Fatal(err)
  }
  fmt.Println(id, name)
}
(*sql.Rows).Next方法用于迭代查询结果集的下一行。
当还有下一行数据时,该方法返回true,并可以使用Scan方法来提取该行
的数据。当没有更多行时,返回false。


5. 执行非查询命令

使用Exec方法执行非查询SQL命令:

代码语言:javascript复制
_, err := db.Exec("INSERT INTO users(name) VALUES('John')")
if err != nil {
  log.Fatal(err)
}

6. 事务处理

通过BeginCommitRollback来执行事务操作:

代码语言:javascript复制
tx, err := db.Begin()
if err != nil {
  log.Fatal(err)
}
_, err = tx.Exec("INSERT INTO users(name) VALUES('John')")
if err != nil {
  tx.Rollback()
  log.Fatal(err)
}
tx.Commit()

总结

database/sql库为Go开发人员提供了一套强大的工具来进行数据库操作。掌握其基础用法有助于提高开发效率和代码可维护性。这只是入门阶段的内容,深入了解还需要查阅更多资料和在实际项目中不断练习。

0 人点赞