gpt4 book ai didi

sqlite - 通过外壳返回的SQLite行,但是不在Go中

转载 作者:行者123 更新时间:2023-12-01 21:09:39 25 4
gpt4 key购买 nike

我有一个SQLite查询,该查询在shell中返回预期结果。但是,当我在Go程序中运行相同的查询时,不会扫描任何值。
这是我的查询:

sqlite> select html, text from messages where id="17128ab240e7526e";
|Hey there
在这种情况下, htmlNULL,而 text具有字符串 "Hey there"。该表还有其他列和索引。
这是我等效的Go代码:
package main

import (
"database/sql"
"log"

_ "github.com/mattn/go-sqlite3"
)

func main() {
filename := "emails.db"
conn, err := sql.Open("sqlite3", filename)
if err != nil {
log.Fatal(err)
}
row, err := conn.Query("select html, text from messages where id = ?", "17128ab240e7526e")
defer row.Close()

if err != nil {
log.Fatal(err)
}
hasRow := row.Next()
log.Println("Has row:", hasRow)

var html, text string
row.Scan(&html, &text)

log.Println("HTML:", html)
log.Println("TEXT:", text)
}

输出为:
$ go run main.go
2020/07/05 21:10:14 Has row: true
2020/07/05 21:10:14 HTML:
2020/07/05 21:10:14 TEXT:
有趣的是,这仅在 html列为空时发生。如果 html不为null,则无论 text列的值是否为null,都将按预期返回数据。
什么可以解释这种行为?

最佳答案

根据评论,我使用COALESCE修改了程序,并且运行良好。
关键点是:不能将scan NULL直接转换为字符串,可以通过使用Query中的Coalesce函数来克服此问题。

row, err := conn.Query("select coalesce(html,'is-null'),text from messages where id =?", "17128ab240e7526e")
defer row.Close()
输出:
arun@debian:stackoverflow$ go run main.go
2020/07/06 10:08:08 Has row: true
HTML: is-null
TEXT: Hey there

关于sqlite - 通过外壳返回的SQLite行,但是不在Go中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62747951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com