golang原生sql

发布时间:2024-12-22 22:51:17

Go语言原生SQL操作

Go语言是一门越来越受欢迎的编程语言,它的简洁、高效以及原生支持并发等特性使得它成为很多开发者喜爱的选择。除了内置的标准库之外,Go还提供了许多第三方库来满足各种不同的需求。其中,对于数据库操作而言,Go开发者可以使用原生SQL语句来执行各种数据库操作。

连接数据库

连接数据库是进行数据库操作的第一步,Go中提供了`database/sql`包用于实现对数据库的访问。可以通过`Open`函数打开数据库连接,该函数接收两个参数:数据库类型和连接字符串。例如:

package main

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

func main() {
    db, err := sql.Open("mysql", "username:password@tcp(hostname:port)/dbname")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()
}

执行查询

执行查询的时候,可以使用`Query`方法执行查询语句,并返回查询结果。例如:

rows, err := db.Query("SELECT id, name FROM users")
if err != nil {
    log.Fatal(err)
}

defer rows.Close()

for rows.Next() {
    var id int
    var name string
    err := rows.Scan(&id, &name)
    if err != nil {
        log.Fatal(err)
    }
    log.Println(id, name)
}

执行插入、更新和删除操作

除了查询操作之外,Go原生的SQL还支持插入、更新和删除等操作。例如:

// 插入数据
stmt, err := db.Prepare("INSERT INTO users(name) VALUES(?)")
if err != nil {
    log.Fatal(err)
}

res, err := stmt.Exec("John Doe")
if err != nil {
    log.Fatal(err)
}

id, err := res.LastInsertId()
if err != nil {
    log.Fatal(err)
}

log.Println("Inserted row id:", id)

// 更新数据
stmt, err = db.Prepare("UPDATE users SET name=? WHERE id=?")
if err != nil {
    log.Fatal(err)
}

res, err = stmt.Exec("Jane Doe", id)
if err != nil {
    log.Fatal(err)
}

affectedRows, err := res.RowsAffected()
if err != nil {
    log.Fatal(err)
}

log.Println("Rows affected:", affectedRows)

// 删除数据
stmt, err = db.Prepare("DELETE FROM users WHERE id=?")
if err != nil {
    log.Fatal(err)
}

res, err = stmt.Exec(id)
if err != nil {
    log.Fatal(err)
}

affectedRows, err = res.RowsAffected()
if err != nil {
    log.Fatal(err)
}

log.Println("Rows affected:", affectedRows)

通过以上示例可以看到,在Go中使用原生SQL进行数据库操作非常简单和直观。同时,Go还提供了更多高级的数据库操作功能,比如事务处理、参数绑定等。开发者可以根据自己的具体需求选择合适的方式来操作数据库。

相关推荐