sql - 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 时它失败了。
解决方案
推荐阅读
- python - 如何在 Pyventory 中重用自动计算的属性?
- angular - 通过Angular 2中的打字稿文件中的方法清除所有输入int html文件
- r - 如何在 r 中不使用 cumprod 的情况下累积乘法向量?
- floating-point - 如果这里的输出是“不相等”,那么为什么使用双精度而不是浮点数不能给出相同的输出?
- javascript - 使用 Typescript 在 React useEffect() 中对数组进行排序
- c# - Unity UI 对象不可见
- angularjs - 如何在Tomcat 9的rewrite.config文件中为多个角度项目添加多个重写规则
- apollo - Apollo typepolicies 如何读取 Query 的兄弟字段?
- javascript - 输入字段未从下拉选择中填充
- neovim - coc.nvim 需要 Python 吗?