Skip to content

Instantly share code, notes, and snippets.

@tenntenn
Last active October 11, 2016 09:41
Show Gist options
  • Save tenntenn/6789296 to your computer and use it in GitHub Desktop.
Save tenntenn/6789296 to your computer and use it in GitHub Desktop.
[Go言語] database/sqlパッケージを使ってみた ref: http://qiita.com/tenntenn/items/dddb13c15643454a7c3b
go get "github.com/go-sql-driver/mysql"
import _ "github.com/go-sql-driver/mysql"
var cnnPool chan *sql.DB
func main() {
cnnPool = make(chan *sql.DB, 10)
for i := 0; i < cap(cnnPool); i++ {
cnnPool <- sql.Open("mysql", "user:password@tpc(host:port)/dbname")
}
}
func getFromDB() {
cnn := <-cnnPool
defer func() {
cnnPool <- cnn
}()
// cnnを使った処理
}
cnn := sql.Open("mysql", "user:password@tcp(host:port)/dbname")
id := 100
var name string
if err := cnn.QueryRow("SELECT name FROM person WHERE id = ?LIMIT 1", id).Scan(&name); err != nil {
log.Fatal(err)
}
fmt.Println(id, name)
rows, err := cnn.Query("SELECT id, name FROM person")
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.Println(id, name)
}
if err := rows.Err(); err != nil {
log.Fatal(err)
}
result, err := cnn.Exec("UPDATE person SET name = ? WHERE id = ?", "Hogera", 100)
if err != nil {
log.Fatal(err)
}
type Result interface {
LastInsertId() (int64, error)
RowsAffected() (int64, error)
}
tx, err := cnn.Begin()
if err != nil {
log.Fatal(err)
}
tx.Commit()
func hoge(tx *sql.Tx) {
defer func() {
// panicがおきたらロールバック
if err := recover(); err != nil {
tx.Rollback()
}
}()
// …
tx.Exec(…)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment