41
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Go言語でMySQL の基本的操作(SELECT、UPDATE、INSERT)を行う

Posted at

#実行環境
環境はMacにインストールされたGo1.11.2、MySQLは8.0.15です。

####MySQLコネクション
sqlパッケージのOpen関数に、ユーザ名:パスワード@IPアドレス/データベース名の順で記述する。Open関数の戻り値はsql.DB。また、sqlパッケージとmysqlドライバーパッケージをインポートする。

package main

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


func main() {
	db, err := sql.Open("mysql", "forge:forge@tcp(127.0.0.1:3333)/webapp")
	if err != nil{
		log.Fatal("db error.")
	}
	defer db.Close()
}

####SELECT
db.Query()にでSELECT文を渡す。rowsに結果セットが格納されるため、rows.Next()で一行一行処理を行う。Scan()に変数ポインタを渡し、DBの結果をセットする。また、引数にはSELECTしたカラム数分指定する必要があるので少し注意が必要。User構造体の変数に結果をセットしている。

	rows, err := db.Query("select id,code,email,name,password from tbl_users")
	if err != nil {
		log.Fatal(err)
	}
	var userResult []User
	for rows.Next() {
		user := User{}
		if err := rows.Scan(&user.id,&user.code,&user.email,&user.name,&user.password); err != nil {
			log.Fatal(err)
		}
		userResult = append(userResult,user)
	}
	for _,u := range userResult{
		fmt.Println("code: ", u.code,", email: ", u.email,
			", name: ", u.name,", password: ",u.password)
	}

####INSERT
Prepare()にINSERT文を渡して、Exec()にプリペアードステートメントを指定してSQLを実行する。

	// insert
	ins, err := db.Prepare("INSERT INTO tbl_users(code,email,name,password) VALUES(?,?,?,?)")
	if err != nil {
		log.Fatal(err)
	}
	ins.Exec("golang-2019", "golang+001@gmail.com","Jhon","123456")

####UPDATE
ほぼ、INSERTと同様。Prepare()に文を渡して、Exec()にプリペアードステートメントを指定してSQLを実行する。

	//update
	upd, err := db.Prepare("UPDATE tbl_users set password = ? where name = ? ")
	if err != nil {
		log.Fatal(err)
	}
	upd.Exec("67890", "Jhon")

#雑感
DB操作は他の言語とほぼ変わらなく問題なく利用出来そう。SELECTの場合は、構造体(エンティティ)に値をセット、リポジトリクラス(UserRepository)やDBアクセス用のファサードを用意すると良さそう。

###参考
http://www.golangprograms.com/example-of-golang-crud-using-mysql-from-scratch.html
https://teratail.com/questions/110152
https://www.pospome.work/entry/2017/02/18/172307
https://github.com/golang/go/blob/master/src/database/sql/example_test.go

41
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?