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.godb, 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.govar (
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.govar (
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.gotr, err := db.Bigin()
if err != nil {
//エラー
}
//この下からエラーに入るたびに
tr.Rollback()
//成功すれば
tr.Commit()
이상
무슨 잘못이 있으면 연락 주세요.
끝까지 읽어줘서 고마워요.
다음에는 아직 확정되지 않았습니다. 아마도'Go 언어~WEB 어플리케이션 개발편~'을 열심히 공부했죠???
Reference
이 문제에 관하여(Go 언어 ~ 데이터베이스 연결 (MySQL) 편~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/watataku8911/items/8c94f8f380f91aa3f3e5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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.godb, 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.govar (
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.govar (
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.gotr, err := db.Bigin()
if err != nil {
//エラー
}
//この下からエラーに入るたびに
tr.Rollback()
//成功すれば
tr.Commit()
이상
무슨 잘못이 있으면 연락 주세요.
끝까지 읽어줘서 고마워요.
다음에는 아직 확정되지 않았습니다. 아마도'Go 언어~WEB 어플리케이션 개발편~'을 열심히 공부했죠???
Reference
이 문제에 관하여(Go 언어 ~ 데이터베이스 연결 (MySQL) 편~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/watataku8911/items/8c94f8f380f91aa3f3e5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
• "database/sql"
• _ "github.com/go-sql-driver/mysql"
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.govar (
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.govar (
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.gotr, err := db.Bigin()
if err != nil {
//エラー
}
//この下からエラーに入るたびに
tr.Rollback()
//成功すれば
tr.Commit()
이상
무슨 잘못이 있으면 연락 주세요.
끝까지 읽어줘서 고마워요.
다음에는 아직 확정되지 않았습니다. 아마도'Go 언어~WEB 어플리케이션 개발편~'을 열심히 공부했죠???
Reference
이 문제에 관하여(Go 언어 ~ 데이터베이스 연결 (MySQL) 편~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/watataku8911/items/8c94f8f380f91aa3f3e5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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)
}
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)
⒈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.gotr, err := db.Bigin()
if err != nil {
//エラー
}
//この下からエラーに入るたびに
tr.Rollback()
//成功すれば
tr.Commit()
이상
무슨 잘못이 있으면 연락 주세요.
끝까지 읽어줘서 고마워요.
다음에는 아직 확정되지 않았습니다. 아마도'Go 언어~WEB 어플리케이션 개발편~'을 열심히 공부했죠???
Reference
이 문제에 관하여(Go 언어 ~ 데이터베이스 연결 (MySQL) 편~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/watataku8911/items/8c94f8f380f91aa3f3e5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
tr, err := db.Bigin()
if err != nil {
//エラー
}
//この下からエラーに入るたびに
tr.Rollback()
//成功すれば
tr.Commit()
Reference
이 문제에 관하여(Go 언어 ~ 데이터베이스 연결 (MySQL) 편~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/watataku8911/items/8c94f8f380f91aa3f3e5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)