【Go言語】MySQLに接続する方法(項目を動的に取得する場合)
前回、Go言語からMySQLに接続する方法について書きましたが、この方法だと呼び出す項目名が固定になってしまい扱いづらい点が問題です。
そこで、どんなSELECT文が来ても値を読み込めるようにソースを修正しました。
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// データベースのハンドルを取得する
db, err := sql.Open("mysql", "user:password@(192.168.10.102:3306)/dbname")
if err != nil {
fmt.Println(err.Error())
}
defer db.Close()
rows, err := db.Query("SELECT * FROM bookmark")
if err != nil {
fmt.Println(err.Error())
}
defer rows.Close()
//項目名取得
columns, err := rows.Columns()
//makeで項目数に応じてスライスを定義
values := make([]interface{}, len(columns))
for i := range columns {
var value interface{}
values[i] = &value
}
//データの取得
for rows.Next() {
//スライスに値を入力
err := rows.Scan(values...)
if err != nil {
fmt.Println(err.Error())
}
//型に応じて処理([]byte型になっているはず)
for i, column := range columns {
switch v := (*(values[i].(*interface{}))).(type) {
case nil:
fmt.Printf("%s: NULL ", column)
case []byte:
fmt.Printf("%s: %s ", column, string(v))
default:
fmt.Printf("%s: %v ", column, v)
}
}
println()
}
}
スポンサーリンク