一尘不染

如何打印查询产生的多个字段?

go

我正在尝试学习如何将database/sql软件包与go-sql-driver一起使用。我编写了以下简单程序,它可以工作,但是我无法弄清楚如何打印多个字段。

该数据库wiki1具有三个字段idtitlebody。我查询“ title1”,这是值之一,但我想打印“ title”和“
body”的值。我该怎么办?

package main

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

func main() {


    db, err := sql.Open("mysql", "root:Password1@/wiki1")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer db.Close()

    st, err := db.Prepare("SELECT title FROM page WHERE title=?")
    if err != nil {
        fmt.Println(err)
    }
    rows, err := st.Query("title1")
    if err != nil {
        fmt.Println(err)
    }

    for rows.Next() {
        var title, body string
        if err := rows.Scan(&title); err != nil {
            fmt.Println(err)
        }

        fmt.Printf("%s\n", title)
    }
    if err := rows.Err(); err != nil {
        fmt.Println(err)
    }
}

阅读 164

收藏
2020-07-02

共1个答案

一尘不染

要读取bodytitle而不是title,请首先更改该语句。

更改

st, err := db.Prepare("SELECT title FROM page WHERE title=?")

st, err := db.Prepare("SELECT body, title FROM page WHERE title=?")

然后更改读数。更改

    var title, body string
    if err := rows.Scan(&title); err != nil {
        fmt.Println(err)
    }

    var title, body string
    if err := rows.Scan(&body, &title); err != nil {
        fmt.Println(err)
    }

这将读取两个列。

要打印字段,您可以执行

fmt.Printf("title: %s\nbody: %s\n", title, body)
2020-07-02