잠시만 기다려 주세요

     '이태원 핼러윈 참사.. 150명 넘게 죽었는데 눈치나 보며 아무것도 안 하는 민주당을 규탄한다. 총선 보이콧... 문재인 시즌2 는 절대 금지다...'
전체검색 :  
이번주 로또 및 연금번호 발생!!   |  HOME   |  여기는?   |  바다물때표   |  알림 (16)  |  여러가지 팁 (1059)  |  추천 및 재미 (156)  |  자료실 (22)  |  
시사, 이슈, 칼럼, 평론, 비평 (613)  |  끄적거림 (136)  |  문예 창작 (716)  |  바람 따라 (75)  |  시나리오 (760)  |  드라마 대본 (248)  |  
살인!


    golang

golang - golang postgresql, mysql, mariadb example... 접속 예제....
이 름 : 바다아이   |   조회수 : 9920         짧은 주소 : https://www.bada-ie.com/su/?371591828854
    "database/sql"
  _ "github.com/go-sql-driver/mysql" --> mysql
    _ "github.com/lib/pq" --> postgresql

위에 것은 일단 import 되어 있어야 합니다. 자신이 사용할 디비에 맞게 쓰세요...
_ 언더바는 뭐냐고 물으신다면 init 함수만 실행시에 사용합니다. 참고하세요...

go get github.com/lib/pq
go get github.com/go-sql-driver/mysql

요거는 가져와야 합니다.

func ErrorCon(err error) {
    if err != nil {
        log.Print(err)
    }
}

func DbConnect() *sql.DB {

    dbinfo := fmt.Sprintf("user=%s password=%s dbname=%s sslmode=disable",
        디비유저, 디비패스워드, 디비이름) // --> postgresql
    db, err := sql.Open("postgres", dbinfo) // --> postgresql
    db, err := sql.Open("mysql", "디비유저:디비패스워드@tcp(127.0.0.1:3306)/디비이름") // --> mysql

    ErrorCon(err)
    err = db.Ping()
    ErrorCon(err)

    return db
}

디비 정보는 상수로 해 놓으면 편합니다.
아래 예제는 트랜잭션 같이 처리합니다.
트랜잭션이 필요없는 단순 select 에서는

    rows, err := db.Query(`select count(*) from 테이블명 where indate = $1`, tnow2)
    ErrorCon(err)
    defer rows.Close()

이때는 begin 부분과 commit 부분이 당연 필요 없겠죠.... tx 가 이닌 바로 db 로 갑니다.
그리고 insert나 update 시에 인자 넣을 때 postgresql 은 $1, $2 이런 식으로 가고 mysql 은 ?, ? 이런식으로 구분하세요...
그럼 이제 본격적으로 예제를 봅시다..

참! 중요한 것이 있는데요... 오픈한 디비와 오픈한 rows 는 반드시 닫아주세요...
defer db.Close()
defer rows.Close()
defer tx2.Close()
이런식으로요...



select, update, insert, delete

var count int

    db := DbConnect()
    defer db.Close()

        tx, err := db.Begin()
        ErrorCon(err)

        rows, err := tx.Query(`LOCK TABLE 잠글테이블 IN ACCESS EXCLUSIVE MODE`)
        defer rows.Close()
        ErrorCon(err)

        tnow := time.Now().Local()
        tnow2 := tnow.Format("2006-01-02")

        rows, err = tx.Query(`select count(*) from 테이블명 where indate = $1`, tnow2)
        ErrorCon(err)

        if rows != nil {
            for rows.Next() {
                err = rows.Scan(&count)
                ErrorCon(err)
            }
        } else {
            count = 0
        }

            tx2, err := tx.Prepare(`update 테이블명 set num = num + 1 where indate = $1`)
            defer tx2.Close()
            _, err = tx2.Exec(tnow2)
            if err != nil {
                tx.Rollback()
                ErrorCon(err)
            }

            tx2, err = tx.Prepare(`insert into 테이블명 (num, indate) values ($1, $2)`)
            _, err = tx2.Exec("1", "now()")
            if err != nil {
                tx.Rollback()
                ErrorCon(err)
            }

            tx2, err = tx.Prepare(`delete from 테이블명 where indate = $1`)

            _, err = tx2.Exec(tnow2)
            if err != nil {
                tx.Rollback()
                ErrorCon(err)
            }

        tx.Commit()

대략 흐름이 이렇습니다.
주의 하셔야 할 것은 select 시에 빈값이 리턴되면 패닉 나요...
왠만한 패닉은 크게 신경 안 써도 되긴 하는데 때에 따라 리턴되는 값 확인해서 가야할 때가 있습니다.

단일 쿼리 같은 경우 scan 을 아래 같은 식으로 하세요...
 
    var name string
    err = db.QueryRow("SELECT name FROM 테이블이름 limit 1").Scan(&name)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(name)


그리고 인자 넣을때 ' ' 작은 따옴표는 필요없습니다. 또한 escape 도 알아서 해 줍니다. 따로 뭐 해줄 필요없어요...

p.s
최근 mysql 을 안 써서 약간 가물 한데.. 맞을 겁니다.
접속 부분만 빼고는 postgresql 과 거의 똑같습니다.
 
| |





      1 page / 6 page
번 호 카테고리 제 목 이름 조회수
179 golang golang , ... 바다아이 1836
178 golang golang , map . 바다아이 1419
177 golang Golang (, , data ) , ... 바다아이 1488
176 golang golang sort ... 바다아이 1727
175 golang golang html.EscapeString html.UnescapeString input value ... 바다아이 1819
174 golang golang go.mod go.sum . GOPATH SRC not module, 1.16 . 바다아이 5126
173 golang go 1.16 ... is not in GOROOT.. GOPATH .... . 바다아이 6028
172 golang , String Formatting 바다아이 7670
171 golang rand.Intn , random, , . 바다아이 7134
170 golang golang ... 바다아이 10267
169 golang golang gopath, goroot .. golang 바다아이 7778
168 golang golang ... Force download file example 바다아이 9593
167 golang golang , , cpu, memory, disk 바다아이 10867
166 golang golang , ... GOOS, GOARCH 바다아이 8622
165 golang golang checkbox ... 바다아이 8384
164 golang golang , , http .... 바다아이 8150
163 golang golang nil , nil , nil ... 바다아이 8497
162 golang 2 golang, go , .... golang .... 바다아이 11386
161 golang golang postgresql, mysql, mariadb ... ` Grave () .. .. 바다아이 8697
160 golang golang postgresql mysql, mariadb scan , null .. 바다아이 8834
159 golang golang , iconv 바다아이 11636
158 golang golang quote escape, unquote 바다아이 9085
157 golang golang , http errorLog , , ... 바다아이 9160
156 golang golang interface , 바다아이 8596
155 golang golang struct .... 바다아이 9339
154 golang golang map map , 바다아이 8800
153 golang golang map .... .... 바다아이 8323
152 golang golang slice copy 바다아이 8456
151 golang golang goto 바다아이 9340
150 golang golang slice sort , int, string, float64 바다아이 8810
| |









Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ Ubuntu + GoLang + PostgreSQL + Mariadb ]
서버위치 : 오라클 클라우드 춘천  실행시간 : 0.05765
to webmaster... gogo sea. gogo sea.