美文网首页
Go语言数据库驱动程序基础构建指南(三)

Go语言数据库驱动程序基础构建指南(三)

作者: 原鸣清 | 来源:发表于2019-02-25 18:03 被阅读5次

    Your First database/sql Program

    本节以完整功能的Go程序的形式快速介绍数据库/ sql的主要功能! 在开始之前,请确保你可以访问MySQL数据库,因为我们将在本书的示例中使用MySQL。如果你没有适合测试的MySQL实例,你可以使用MySQL Sandbox实用程序在几秒钟内获得一个。【书中给的地址是这个,我访问的时候连不上,不知道是不是被墙了。如果你用过docker,用docker启动一个mysql也是非常迅速的,实在不行,就去官网下载一个】

    创建一个文件,命名hello_mysql.go,你也可以下载源码Demo。你可能需要根据需要调整连接参数以连接到测试数据库。另请注意,该示例假定存在默认测试数据库,并且你的用户具有以下权限,我这里是在本机启动了一个test数据库。

    package main
    
    import (
        "database/sql"
        "log"
        _ "github.com/go-sql-driver/mysql"
    )
    
    func main() {
            connectionString := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s",
            "root",
            "123456",
            "localhost",
            "3306",
            "test")
        db, err := sql.Open("mysql", connectionString)
        if err != nil {
            log.Fatal(err)
        }
        defer db.Close()
    
        _, err = db.Exec(
            "CREATE TABLE IF NOT EXISTS test.hello(world varchar(50))")
        if err != nil {
            log.Fatal(err)
        }
    
        res, err := db.Exec(
            "INSERT INTO test.hello(world) VALUES('hello world!')")
        if err != nil {
            log.Fatal(err)
        }
        rowCount, err := res.RowsAffected()
        if err != nil {
            log.Fatal(err)
        }
        log.Printf("inserted %d rows", rowCount)
    
        rows, err := db.Query("SELECT * FROM test.hello")
        if err != nil {
            log.Fatal(err)
        }
        for rows.Next() {
            var s string
            err = rows.Scan(&s)
            if err != nil {
                log.Fatal(err)
            }
            log.Printf("found row containing %q", s)
        }
        rows.Close()
    }
    

    使用go run hello_mysql.go运行新的Go程序。多次运行是安全的。运行之后,你可以看到如下所示的输出,它会继续在表中插入行:

    go.test.mysql.png

    恭喜!你完成了第一个使用Go与MySQL服务器交互的程序。 你可能会感到惊讶的是,你刚刚运行的代码并不是某种过于简化,愚蠢的例子。 它与你在高负载下在生产系统中使用的代码非常相似,包括错误处理。 我们将在本书的更多部分中探讨这些代码的大部分内容,并详细了解它的作用。 现在,我们只提几个点:

    • 导入了"database/sql"并且使用了一种应用于mysql数据库的驱动程序(driver)。
    • 创建了sql.DB,并且调用了sql.Open();传递了驱动程序名称和连接字符串。
    • 使用Exec()创建表并且插入数据行,并且检查结果。
    • 使用Query()查表数据,使用rows.Next()迭代结果集,并且使用rows.Scan()将当前行的字段内容赋值给变量。
    • 在结束时使用.Close()关闭数据库,清理资源。

    让我们深入研究这些点的细节。从sql.DB本身开始,看看它是什么东西,又是怎么工作的。

    相关文章

      网友评论

          本文标题:Go语言数据库驱动程序基础构建指南(三)

          本文链接:https://www.haomeiwen.com/subject/esogyqtx.html