我在查询 sqlite3 数据库中的一行时收到以下错误:sql: Scan error on column index 3: converting string "" to a int64: strconv.ParseInt: parsing "": invalid syntax查询本身有效,因为它能够返回查询的数据。我应该注意到数据库中的每一行都包含几个带有 NULL 数据的列(仅填充Id和Email列)。我正在努力理解错误发生的原因以及如何解决它。SQL 表有以下九列:`0,Id,INTEGER,0,,11,Email,TEXT,0,,02,Name,TEXT,0,,03,Rsvp,INTEGER,0,,04,Guests,INTEGER,0,,05,Meal0,INTEGER,0,,06,Meal1,INTEGER,0,,07,Comments,TEXT,0,,08,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非常感谢您对错误的任何帮助或洞察!
1 回答
蝴蝶刀刀
TA贡献1801条经验 获得超8个赞
似乎您的一列(最有可能Rsvp
)存储为字符串类型而不是 int 并且它被设置为""
而不是null
。
因此,您要么必须更改Rsvp
(可能是不同的列)sql.NullString
,重做数据库以使数字字段具有空值而不是空字符串,或者如果您认为这是驱动程序中的错误,请在其跟踪器上打开一个问题。
- 1 回答
- 0 关注
- 274 浏览
添加回答
举报
0/150
提交
取消