go言語 mysqlに接続してselectを実行する

  • 作成日 2022.01.06
  • 更新日 2022.01.07
  • go
go言語 mysqlに接続してselectを実行する

go言語で、mysqlに接続してselectを実行するサンプルコードを記述してます。go言語のバージョンは1.14.6を使用してます。

環境

  • OS windows 11 Home
  • go 1.14.6

github.com/go-sql-driver/mysqlインストール

ライブラリ「github.com/go-sql-driver/mysql」を使用するのでない場合は、「go get」を使って追加しておきます。

go get -u github.com/go-sql-driver/mysql

サンプルコード

localhostにある「mysql」に接続して、以下のDB「foo」にあるテーブル「bar」にselect文を実行してみます。

テーブル「bar」

サンプルコードは、以下となります。

package main

import (
	"database/sql"
	"fmt"

	_ "github.com/go-sql-driver/mysql"
)

type Bar struct {
	ID int
	N  string
}

func main() {

	//sql.Open("mysql", "user:password@/dbname")
	db, err := sql.Open("mysql", "testuser:password@tcp(localhost:3306)/foo")

	if err != nil {
		panic(err.Error())
	}

	defer db.Close()

	rows, err := db.Query("SELECT * FROM bar")

	if err != nil {
		fmt.Println("データベース接続失敗")
		panic(err.Error())
	} else {
		fmt.Println("データベース接続成功")
	}

	defer rows.Close()

	for rows.Next() {

		var bar Bar

		err := rows.Scan(&bar.ID, &bar.N)

		if err != nil {
			panic(err.Error())
		}
		fmt.Println(bar.ID, bar.N)
	}

	err = rows.Err()

	if err != nil {
		panic(err.Error())
	}
}

実行結果を見ると、取得できていることが確認できます。

1件だけ取得

1件だけ取得する場合は「QueryRow」を使用します。

package main

import (
	"database/sql"
	"fmt"

	_ "github.com/go-sql-driver/mysql"
)

type Bar struct {
	ID int
	N  string
}

func main() {
	//sql.Open("mysql", "user:password@/dbname")
	db, err := sql.Open("mysql", "testuser:password@tcp(localhost:3306)/foo")

	if err != nil {
		panic(err.Error())
	}

	defer db.Close()

	var bar Bar

	err = db.QueryRow("SELECT * FROM bar WHERE id = ?", 2).Scan(&bar.ID, &bar.N)

	if err != nil {
		panic(err.Error())
	}

	fmt.Println(bar.ID, bar.N)

}