美文网首页读书笔记GO
《go web 编程》第四章 访问数据库:database/sq

《go web 编程》第四章 访问数据库:database/sq

作者: bycall | 来源:发表于2022-09-15 10:10 被阅读0次

    driver.Driver

    Driver 是一个数据库驱动的接口,他定义了一个 method: Open (name string),这个方法返回一个数据库的 Conn 接口。

    
    type Driver interface {
        Open(name string) (Conn, error)
    }
    

    返回的 Conn 只能用来进行一次 goroutine 的操作,也就是说不能把这个 Conn 应用于 Go 的多个 goroutine 里面。如下代码会出现错误

    
    ...
    go goroutineA (Conn)  // 执行查询操作
    go goroutineB (Conn)  // 执行插入操作
    ...
    

    上面这样的代码可能会使 Go 不知道某个操作究竟是由哪个 goroutine 发起的,从而导致数据混乱,比如可能会把 goroutineA 里面执行的查询操作的结果返回给 goroutineB 从而使 B 错误地把此结果当成自己执行的插入数据。

    第三方驱动都会定义这个函数,它会解析 name 参数来获取相关数据库的连接信息,解析完成后,它将使用此信息来初始化一个 Conn 并返回它。

    driver.Stmt

    Stmt 是一种准备好的状态,和 Conn 相关联,而且只能应用于一个 goroutine 中,不能应用于多个 goroutine。

    type Stmt interface {
        Close() error
        NumInput() int
        Exec(args []Value) (Result, error)
        Query(args []Value) (Rows, error)
    }
    

    Close 函数关闭当前的链接状态,但是如果当前正在执行 query,query 还是有效返回 rows 数据。

    NumInput 函数返回当前预留参数的个数,当返回 >=0 时数据库驱动就会智能检查调用者的参数。当数据库驱动包不知道预留参数的时候,返回 -1。

    Exec 函数执行 Prepare 准备好的 sql,传入参数执行 update/insert 等操作,返回 Result 数据

    Query 函数执行 Prepare 准备好的 sql,传入需要的参数执行 select 操作,返回 Rows 结果集

    相关文章

      网友评论

        本文标题:《go web 编程》第四章 访问数据库:database/sq

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