Go 언어 ~ 데이터베이스 연결 (MySQL) 편~

15719 단어 Go

입문


안녕하세요.나는 모 학교에서 프로그래밍 등을 배우는 서버 분야의 프로그래머다.
그럼 이번에는'Go언어~데이터베이스 연결(MySQL)편~'의'Go에서 데이터베이스에 대한 처리 방법'을 살펴보겠습니다.
그럼 바로 가보겠습니다
"고언어~기본문법편①(변수, 상수, 조건분지, 중복처리)~"에 대해여기부터.
Go언어~기본문법편②(배열)~에 관하여여기부터.
Go언어~기본문법편③(함수)~에 관하여여기부터.
"Go언어~기본문법편④(지침, 구조체)~를 열심히 배웠습니다"에 대해서는 여기를 참조하십시오.
'고어학~포장편~'에 대해여기부터.

개요


Go 언어로 데이터베이스에 접근하려면 sql을 사용하십시오.데이터베이스 사용.이 유형을 사용하면 문장과 사무를 생성하고 조회를 실행하며 결과를 검색할 수 있습니다.
먼저 알아야 할 것은, sql.데이터베이스는 데이터베이스 연결이 아닙니다.

가져오기


다음 두 개를 가져오십시오.
• "database/sql"

• _ "github.com/go-sql-driver/mysql"
드라이버 가져오기가 비어 있음을 주의하십시오.
가방 수리부호를 _로 설정에서 기술한 장면은 다음과 같은 절차를 이용하여 명세표를 작성하여 개념 디자인에서 체량의 부피를 분석하도록 한다.
이 중에서 드라이버는 데이터베이스/sql 패키지에 사용할 수 있도록 등록합니다.하지만 보통 다른 일은 일어나지 않는다.

데이터베이스 액세스

sql.Open("mysql", "ユーザ名:パスワード@tcp(ホスト名:ポート番号)/データベース名")
//通常:ポート番号3306(筆者はMAMPでのデータベースサーバを使っているためポート番号8889)
*database/sql 작업은 항상 오류 처리가 필요하다
데이터베이스가 사용할 수 있고 접근할 수 있는지 즉시 확인하려면db.Ping()을 사용하십시오.그때는 잘못된 것을 검사하는 것을 잊지 마세요.
작업이 끝나면 일반적으로 데이터베이스 () 를 닫습니다.
*defer: 함수의 끝에 특정한 처리를 수행할 수 있다.=지연 운행
sql.go
db, err := sql.Open("mysql", "scott:tiger@tcp(127.0.0.1:8889)/wp32scott")
if err != nil {
    log.Fatal(err)
}

err = db.Ping()
if err != nil {
    fmt.Println("データベース接続失敗")
}

defer db.Close()

참조계


모두 처리하다


# 테이블의 모든 열 이름 변수를 준비합니다.(구조체를 만들 수도 있다)
⒉db.SELECT 문구로 질의를 보냅니다.
3. () 잎의 반환 값을 닫습니다.
행 세트에 대한 반복 처리를 위해 반환 값이 있는 Next () 가 있습니다.
⒌각 행에서 ⒌의 반환값인 Scan(&#의 변수,...)으로 열의 변수를 읽습니다.
sql.go
var (
    deptno int
    dname string
    loc string
)

rows, err := db.Query("SELECT * FROM dept")
if err != nil {
    log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
    err := rows.Scan(&deptno, &dname, &loc)
    if err != nil {
    log.Fatal(err)
    }
    //結果
    fmt.Println(deptno, dname, loc)
}

주 키 검색


# 테이블의 모든 열 이름 변수를 준비합니다.(구조체를 만들 수도 있다)
⒉db."SELECT 문구"에서 SQL 발표
3. 잎의 반환값을 QueryRow(매개변수)합니다.
sql.go
var (
    deptno int
    dname string
    loc string
)
stmt, err := db.Prepare("SELECT * FROM dept WHERE deptno = ?")
if err != nil {
    log.Fatal(err)
}
err = stmt.QueryRow(10).Scan(&deptno, &dname, &loc)
if err != nil {
    log.Fatal(err)
}
fmt.Println(deptno, dname, loc)

시스템 업데이트(INSERT, UPDATE, DELETE)


⒈db.SQL 삽입, 업데이트, 삭제
2. # # 값을 반환하는 Exec(매개변수)를 통해 수행됩니다.
sql.go
/*
 *INSERT
 */
stmt, err := db.Prepare("INSERT INTO dept(deptno, dname, loc) VALUES(?, ?, ?)")
if err != nil {
   log.Fatal(err)
}
res, err := stmt.Exec(50, "WATATAKU", "JAPAN")
if err != nil {
    log.Fatal(err)
}
rowCnt, err := res.RowsAffected()  // 影響を受けた行数
if err != nil {
    log.Fatal(err)
}
log.Printf("%d件追加しました", rowCnt)

/*
 *UPDATE
 */
stmt, err := db.Prepare("UPDATE dept SET dname=?,loc=? WHERE deptno=?")
if err != nil {
    log.Fatal(err)
}
res, err := stmt.Exec("KAWAAI", "KORIA", 50)
if err != nil {
    log.Fatal(err)
}
rowCnt, err := res.RowsAffected()  // 影響を受けた行数
if err != nil {
    log.Fatal(err)
}
log.Printf("%d件更新しました", rowCnt)

/*
 *DELETE
 */
stmt, err := db.Prepare("DELETE FROM dept WHERE deptno=?")
if err != nil {
    log.Fatal(err)
}
res, err := stmt.Exec(50)
if err != nil {
    log.Fatal(err)
}
rowCnt, err := res.RowsAffected()  // 影響を受けた行数
if err != nil {
    log.Fatal(err)
}
log.Printf("%d件削除しました", rowCnt)

트랜잭션 처리


SQL 발매 전 Bigin(), 각 오류에 들어갈 때마다 Rollback()이 성공하면 Commit().
sql.go
tr, err := db.Bigin()
if err != nil {
   //エラー
}
//この下からエラーに入るたびに
tr.Rollback()
//成功すれば
tr.Commit()
이상
무슨 잘못이 있으면 연락 주세요.
끝까지 읽어줘서 고마워요.
다음에는 아직 확정되지 않았습니다. 아마도'Go 언어~WEB 어플리케이션 개발편~'을 열심히 공부했죠???

좋은 웹페이지 즐겨찾기