Как запросить и обработать UUID, созданный с помощью go.uuid и вставленный в PostgreSQL 11? - PullRequest
0 голосов
/ 22 марта 2019

Я вставил в таблицу PostgreSQL UUID, созданный с помощью go.uuid:

import (
        "github.com/satori/go.uuid"
) 

func main() {
        usid := uuid.Must(uuid.NewV4())
        fmt.Println("usid := uuid.Must(uuid.NewV4")
        fmt.Println(usid.String())
        res, err := stmt.Exec(cn, csn, ccn, id)
        if err != nil || res == nil {
                log.Fatal(err)
        }
}

    sStmt := "insert into basicuserinfo (cn, csn, ccn, appUserAccountID ) 
    values ($1, $2, $3, $4)"
    stmt, err := db.Prepare(sStmt)
    if err != nil {
            log.Fatal(err)
    }
    defer stmt.Close()
    fmt.Println("# Inserting values")

А на самом деле в postgreSQL вставлена ​​строка:

           cn  |  csn  |  ccn | id
                              | 2412fcd3-8712-4a0f-830a-d77bd4cf2195      

Чтобы запросить переменные Голанга, я сначала попытался использовать подготовленный оператор. Во-первых, используя db.PrepareContext:

    sel := "SELECT appUserAccountID FROM basicuserinfo WHERE cn = $1 AND csn 
    = $2 AND ccn = $3"

     stmt, err = db.PrepareContext(ctx,sel)
    if err != nil {
            log.Fatal(err)
    }
    var utenteID string
    err = stmt.QueryRowContext(ctx,cn, csn, ccn).Scan(&utenteID)
    log.Printf("ID= %s\n", utenteID)
    fmt.Println("aaaaaaaaa") // Just to check that the this line gets executed

Чье выполнение остается «бездействующим», в режиме ожидания, без завершения и выдачи какого-либо вывода:

marco@pc01:~/go/marcoGolang/goPostgres$ go run pqExample00.go
# Inserting values

Затем я попытался таким образом, с помощью db.Prepare ():

    stmt, err = db.Prepare(sel)
    if err != nil {
            log.Fatal(err)
    }
    res, err = stmt.Exec(cnv, csnv, ccnv)

Во втором случае кажется, что выполнение успешно завершается, но я не знаю, как преобразовать sql.Result в правильную форму, которую можно обработать, например, просто отобразить с помощью fmt.Println () или получить другие обработки. Итак ... как правильно запрашивать и обрабатывать UUID, созданный с помощью go.uuid и вставленный в PostgreSQL 11?

Надеюсь на вашу помощь. Marco

1 Ответ

2 голосов
/ 22 марта 2019

Если у вас нет причин использовать PrepareContext, вы можете просто сделать это?

db, err := sql.Open("postgres", connectionString)

sel := "SELECT appUserAccountID FROM basicuserinfo WHERE cn = $1 AND csn = $2 AND ccn = $3"

var idn string
err = db.QueryRow(sel, cn, csn, ccn).Scan(&idn)
if err != nil {
    log.Fatal(err)
}

fmt.Printf("idn: %v\n", idn)
...