2013-07-20 35 views
0

我正試圖學習如何使用database/sql包與go-sql-driver。我寫了下面這個簡單的程序,它可以工作,但我無法弄清楚如何打印多個字段。如何打印查詢產生的多個字段?

數據庫wiki1有三個字段,id,titlebody。我查詢「title1」這是其中一個值,但我想打印「title」和「body」的值。我如何?

package main 

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

func main() { 


    db, err := sql.Open("mysql", "root:[email protected]/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) 
    } 
} 

回答

2

要閱讀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) 

你會發現使用數據庫/ SQL查詢有關詳細信息,請閱讀本related question

+0

謝謝@dystroy!我還注意到'SELECT'中列名的順序必須與數據庫中列的順序相匹配。 – Zeynel

+1

不,選擇中列的順序通常不必與數據庫中的某一個匹配。但是select中的順序必須與'scan'的順序相匹配。 –