Golang은 다양한 데이터베이스를 다룰 수 있는데요. Oracle, MySQL, MSSQL Server, DB2 그리고 PostgreSQL 등에 대한 DB 드라이버 라이브러리를 제공합니다. 각 드라이버는 github를 통해 소스코드와 함께 제공되며 드라이버에 대한 라이브러리 소스코드는 go get {URL}처럼 Command Line을 통해 설치하여 사용할 수 있습니다.
이 글은 Local PC에 설치된 PostgreSQL에 연결하여, 이미 존재하는 postgres 데이터베이스의 test 테이블에 데이터를 추가(INSERT)하고 쿼리(SELECT)하는 코드를 설명합니다.
먼저 postgreSQL에 연결하는 코드는 아래와 같습니다.
package main import ( "database/sql" "fmt" _ "github.com/lib/pq" ) const ( DB_USER = "postgres" DB_PASSWORD = "ILOVEU" DB_NAME = "postgres" ) func main() { dbinfo := fmt.Sprintf("user=%s password=%s dbname=%s sslmode=disable", DB_USER, DB_PASSWORD, DB_NAME) db, err := sql.Open("postgres", dbinfo) if err != nil { panic(err) } defer db.Close() // ... 계속
다음 코드는 연결된 DB에 데이터를 추가(INSERT)하는 코드입니다.
result, err := db.Exec("INSERT INTO test (name, age) VALUES('Jackass', 19)") if err != nil { panic(err) } cntAffected, err := result.RowsAffected() if err != nil { panic(err) } fmt.Println("Affected Rows:", cntAffected) // ... 계속
위의 코드 중 11번은 INSERT 된 데이터의 개수를 나타내며, 여기서는 1개를 추가했으므로 1이 됩니다. 다음 코드는 저장된 데이터를 조회(SELECT)하는 코드입니다.
rows, err := db.Query("SELECT name, age FROM test") if err != nil { panic(err) } defer rows.Close() var name string var age int for rows.Next() { err := rows.Scan(&name, &age) if err != nil { panic(err) } fmt.Println(name, age) } }
실행 결과는 다음과 같습니다.
Affected Rows: 1 Dip2K 40 Dip2K 40 Jackass 19 Jackass 19 Jackass 19 Jackass 19 Jackass 19 Jackass 19 Jackass 19