티스토리 뷰
Go에서 SQL 데이터베이스를 사용하려면 database/sql 패키지를 활용합니다. 이 패키지는 SQL 데이터베이스에 접속하고, 쿼리를 실행하며, 결과를 처리하는 기능을 제공합니다. 일반적으로 database/sql 패키지는 특정 데이터베이스 드라이버와 함께 사용됩니다. 예를 들어, MySQL 데이터베이스를 사용하려면 github.com/go-sql-driver/mysql 패키지를 사용할 수 있습니다.
기본 사용 예제
아래 예제는 MySQL 데이터베이스를 사용하여 데이터베이스에 연결하고, 데이터를 삽입, 조회, 업데이트, 삭제하는 방법을 보여줍니다.
1. MySQL 드라이버 설치
먼저 MySQL 드라이버를 설치합니다.
go mod init
go get -u github.com/go-sql-driver/mysql // mysql
go get -u github.com/mattn/go-sqlite3 // sqlite3
2. Go 코드 작성
다음은 main.go 파일에 작성할 예제 코드입니다:
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/mattn/go-sqlite3"
)
// User 구조체 정의
type User struct {
ID int
Name string
Age int
}
func main() {
// 메모리 데이터베이스에 연결
db, err := sql.Open("sqlite3", ":memory:")
if err != nil {
log.Fatalf("Error opening database: %v", err)
}
defer db.Close()
// 테이블 생성
createTable(db)
// 데이터 삽입
insertUser(db, "Alice", 30)
insertUser(db, "Bob", 25)
// 데이터 조회
users := getUsers(db)
for _, user := range users {
fmt.Printf("User: %v\n", user)
}
// 데이터 업데이트
updateUserAge(db, 1, 31)
// 데이터 삭제
deleteUser(db, 2)
}
// 테이블 생성 함수
func createTable(db *sql.DB) {
query := `
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
);`
_, err := db.Exec(query)
if err != nil {
log.Fatalf("Error creating table: %v", err)
}
fmt.Println("Successfully created table")
}
// 데이터 삽입 함수
func insertUser(db *sql.DB, name string, age int) {
query := "INSERT INTO users (name, age) VALUES (?, ?)"
_, err := db.Exec(query, name, age)
if err != nil {
log.Fatalf("Error inserting user: %v", err)
}
fmt.Println("Successfully inserted user")
}
// 데이터 조회 함수
func getUsers(db *sql.DB) []User {
query := "SELECT id, name, age FROM users"
rows, err := db.Query(query)
if err != nil {
log.Fatalf("Error querying users: %v", err)
}
defer rows.Close()
var users []User
for rows.Next() {
var user User
err := rows.Scan(&user.ID, &user.Name, &user.Age)
if err != nil {
log.Fatalf("Error scanning user: %v", err)
}
users = append(users, user)
}
return users
}
// 데이터 업데이트 함수
func updateUserAge(db *sql.DB, id int, age int) {
query := "UPDATE users SET age = ? WHERE id = ?"
_, err := db.Exec(query, age, id)
if err != nil {
log.Fatalf("Error updating user age: %v", err)
}
fmt.Println("Successfully updated user age")
}
// 데이터 삭제 함수
func deleteUser(db *sql.DB, id int) {
query := "DELETE FROM users WHERE id = ?"
_, err := db.Exec(query, id)
if err != nil {
log.Fatalf("Error deleting user: %v", err)
}
fmt.Println("Successfully deleted user")
}
코드 설명
- SQLite 드라이버 설치: github.com/mattn/go-sqlite3 패키지를 사용하여 SQLite 데이터베이스와 통신합니다.
- 메모리 데이터베이스 연결: sql.Open 함수를 사용하여 메모리 내 데이터베이스에 연결합니다. ":memory:" 데이터베이스 이름을 사용하면 SQLite가 메모리에서 데이터베이스를 생성합니다.
- 테이블 생성: createTable 함수는 CREATE TABLE SQL 명령어를 실행하여 users 테이블을 생성합니다.
- 데이터 삽입: insertUser 함수는 db.Exec를 사용하여 데이터를 삽입합니다. ? 플레이스홀더를 사용하여 안전하게 쿼리를 작성합니다.
- 데이터 조회: getUsers 함수는 db.Query를 사용하여 데이터를 조회하고, rows.Scan을 사용하여 결과를 구조체에 매핑합니다.
- 데이터 업데이트: updateUserAge 함수는 db.Exec를 사용하여 데이터를 업데이트합니다.
- 데이터 삭제: deleteUser 함수는 db.Exec를 사용하여 데이터를 삭제합니다.
이 예제는 기본적인 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 다루며, Go에서 메모리 데이터베이스를 사용하는 방법을 설명합니다. SQLite의 메모리 모드를 사용하면 테스트 및 개발 중에 간편하게 데이터베이스 작업을 수행할 수 있습니다.
출처 : chatGPT
'go' 카테고리의 다른 글
Go kit 프레임워크 (0) | 2024.07.17 |
---|---|
Go 삭제 후 Homebrew로 설치하기(go kit 설치) (0) | 2024.07.17 |
Go xml 처리 (0) | 2024.07.16 |
Go Json 처리 (0) | 2024.07.16 |
Go Http Post 호출 (0) | 2024.07.16 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- listToMap
- ag grid
- spring
- mapToList
- java
- 메시지
- example
- 그리드
- REST
- 엑셀
- UI
- AG-GRID
- restful서비스
- Javascript
- oracle
- 스프링부트
- 예제
- SHEETJS
- lombok
- 설정
- 스프링
- cache
- 타임리프
- springboot
- thymeleaf
- sample
- 샘플
- RESTful
- mybatis
- Spring Boot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함