首页 > 解决方案 > Golang 函数返回一个 postgres 选择结果,然后在另一个函数中扫描它

问题描述

我有一个连接到 postgres 数据库并从表中选择的函数,但我不想在同一个函数中使用该数据。我想要的是返回 queryResult 对象并将其传递给另一个函数,然后该函数应该执行 queryResult.Next() 函数来获取行。

这是我尝试过的,但它返回空的queryResult。当我调用 queryResult.Next() 时,我检查循环是否至少运行一次,我意识到它甚至从未进入循环。


func dbconnect() *sql.DB {
    //url := "postgres://qkwgasaecyvmmh:7f0acdb20c3446d07e52c125aff4568d43593d62e864bb00291d1688ecd057dc@ec2-50-17-197-184.compute-1.amazonaws.com:5432/d1oqfcb0uf7on4"
    //connection, _ := pq.ParseURL(url)
    connection := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s", host, port, user, password, dbname)
    connection += " sslmode=disable"

    db, err := sql.Open("postgres", connection)
    if err != nil {
        log.Println(err)
    }else{
        log.Println("Connected to postgres db.") 
    }
    return db
}

//------------
    
func retreiveAllResponses() *sql.Rows {
    db := dbconnect()
    defer db.Close()
    //retrieve all responses. 
    selecQuery := fmt.Sprintf("SELECT OrgResponseData FROM responses;")
    queryResult, err := db.Query(selecQuery)
    defer queryResult.Close()
    if err != nil {  
        fmt.Println(err.Error())
    }  
     
    return queryResult;
 }

//-----------------
    noResponsesYet := true 
    for queryResult.Next(){
        //stream each response to the client
        log.Println(" --> queryResult.Next loop executing ...")
        var OrgResponseData string  
        _ = queryResult.Scan(&OrgResponseData) 
       noResponsesYet = false
    }
    

我确信数据库表中有一些我希望返回的数据。

顺便说一句,这在 MySQL 中运行良好,但是当我切换到 postgres 时它失败了。

标签: sqlpostgresqlfunctiongo

解决方案


推荐阅读