Go言語でのSQLデータベース操作
はじめに
このページではGo言語を使用してSQLデータベースに接続し、データの操作を行う方法について記述します。
Go言語でのSQLデータベース操作
Go言語でSQLデータベースを操作するためには、標準ライブラリのdatabase/sql
パッケージを使用します。このパッケージはデータベースへの接続やクエリの実行、トランザクションの処理などを行うためのインターフェースを提供します。また、具体的なデータベースドライバも必要です。例えば、MySQLの場合はgithub.com/go-sql-driver/mysql
を使用します。
以下では、GoでSQLデータベースを操作する基本的な手順をいくつかの例を通して説明します。
1. 必要なパッケージのインポート
まず、GoでSQLを扱うために必要なパッケージをインポートします。
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
_ "github.com/go-sql-driver/mysql"
の部分はMySQLのドライバをインポートしています。アンダースコア_
を使うことで、このパッケージのinit()
関数のみが実行され、database/sql
がこのドライバを使用できるようになります。
2. データベースへの接続
データベースへの接続はsql.Open
関数を使用します。この関数はデータベースドライバ名と接続文字列を引数に取り、*sql.DB
オブジェクトを返します。
func connectDB() (*sql.DB, error) {
// ユーザー名:パスワード@tcp(ホスト:ポート)/データベース名
dsn := "user:password@tcp(127.0.0.1:3306)/testdb"
db, err := sql.Open("mysql", dsn)
if err != nil {
return nil, err
}
// 実際に接続できるかを確認
err = db.Ping()
if err != nil {
return nil, err
}
return db, nil
}
この関数では、sql.Open
でデータベースに接続し、db.Ping()
で実際に接続できるかどうかを確認しています。
3. データのクエリ実行
データベースへの接続が確立されたら、データのクエリを実行できます。例えば、SELECT文を使用してデータを取得する場合は、db.Query
メソッドを使用します。
func queryData(db *sql.DB) {
rows, err := db.Query("SELECT id, name FROM users")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var id int
var name string
if err := rows.Scan(&id, &name); err != nil {
log.Fatal(err)
}
fmt.Printf("ID: %d, Name: %s\n", id, name)
}
}
db.Query
は*sql.Rows
を返します。取得したデータはrows.Next()
を使用して1行ずつ読み込み、rows.Scan
で各カラムの値を変数にコピーします。
4. データの挿入、更新、削除
データの挿入、更新、削除にはdb.Exec
メソッドを使用します。以下はデータの挿入例です。
func insertData(db *sql.DB) {
result, err := db.Exec("INSERT INTO users (name) VALUES (?)", "John Doe")
if err != nil {
log.Fatal(err)
}
id, err := result.LastInsertId()
if err != nil {
log.Fatal(err)
}
fmt.Printf("Inserted record ID: %d\n", id)
}
db.Exec
はsql.Result
を返し、これを使って挿入されたレコードのIDや影響を受けた行数を取得することができます。
5. トランザクションの使用
複数の操作を一つのトランザクションとしてまとめる場合は、db.Begin
でトランザクションを開始し、Commit
またはRollback
を使用します。
func transactionExample(db *sql.DB) {
tx, err := db.Begin()
if err != nil {
log.Fatal(err)
}
_, err = tx.Exec("INSERT INTO users (name) VALUES (?)", "Alice")
if err != nil {
tx.Rollback()
log.Fatal(err)
}
_, err = tx.Exec("INSERT INTO users (name) VALUES (?)", "Bob")
if err != nil {
tx.Rollback()
log.Fatal(err)
}
err = tx.Commit()
if err != nil {
log.Fatal(err)
}
}
トランザクション中にエラーが発生した場合、Rollback
を呼び出して変更を取り消します。すべての操作が成功した場合にのみ、Commit
を呼び出して変更を確定します。
6. データベース接続のクローズ
プログラムの終了時にはdb.Close
を呼び出してデータベース接続を閉じることを忘れないようにしましょう。
defer db.Close()
まとめ
Go言語でSQLデータベースを操作するためには、database/sql
パッケージを使用し、データベースドライバをインポートする必要があります。基本的な操作として、データの接続、クエリ実行、データの挿入、更新、削除、トランザクションの使用方法を学びました。これらの操作を組み合わせて、Goで強力なデータベース操作を行うことができます。
詳細はGoの公式ドキュメントを参照してください: Go database/sql
パッケージ.
Discussion