gpt4 book ai didi

sql - 如何修复golang sql字符串转换扫描错误

转载 作者:IT王子 更新时间:2023-10-29 01:39:50 27 4
gpt4 key购买 nike

我在查询 sqlite3 数据库中的行时收到以下错误:

sql:列索引 3 上的扫描错误:将字符串“”转换为 int64:strconv.ParseInt:解析“”:语法无效

查询本身有效,因为它能够返回查询的数据。我应该注意到,数据库中的每一行都包含多个包含 NULL 数据的列(仅填充了 IdEmail 列)。我正在努力理解错误发生的原因以及如何解决它。

SQL 表有以下九列:

`0,Id,INTEGER,0,,1
1,Email,TEXT,0,,0
2,Name,TEXT,0,,0
3,Rsvp,INTEGER,0,,0
4,Guests,INTEGER,0,,0
5,Meal0,INTEGER,0,,0
6,Meal1,INTEGER,0,,0
7,Comments,TEXT,0,,0
8,ModifiedAt,TEXT,0,,0`

在 server.go 中使用以下结构定义(我添加了 sql.NullString 来处理空列):

type User struct {
Id int
Email string
Name sql.NullString
Rsvp sql.NullInt64
Guests sql.NullInt64
Meal0 sql.NullInt64
Meal1 sql.NullInt64
Comments sql.NullString
ModifiedAt sql.NullString
}

查询来自以下处理程序:

func Rsvp1Handler(w http.ResponseWriter, r *http.Request) {
email := r.URL.Path[len("/rsvp/"):]
var user User
err := userStatement.QueryRow(email).Scan(&user.Id, &user.Email, &user.Name, &user.Rsvp, &user.Guests, &user.Meal0, &user.Meal1, &user.Comments, &user.ModifiedAt)

switch {
case err == sql.ErrNoRows:
log.Println("No user with that ID.")
w.Header().Set("Content-Type", "text/plain")
fmt.Fprintf(w, "Email address not found: %s", email)

case err != nil:
log.Println(err)
fmt.Fprintf(w, "Database error:\n", err)
default:
log.Println("Query success. Email address: ", email)
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(&user)
}

它依赖于以下常量和 var:

const userSelect  = "SELECT * FROM rsvp WHERE email = ?"
var userStatement *sql.Stmt

非常感谢任何帮助或深入了解错误!

最佳答案

您的列之一(很可能是 Rsvp)似乎存储为字符串类型而不是 int 并且它被设置为 "" 而不是 null.

因此,您必须将 Rsvp(可能是不同的列)更改为 sql.NullString,重做数据库以使用空值而不是数字字段的空字符串,或者如果您认为这是驱动程序中的错误,请在他们的跟踪器上提出问题。

关于sql - 如何修复golang sql字符串转换扫描错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26078522/

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