簡體   English   中英

如何修復Golang SQL字符串轉換掃描錯誤

[英]How to fix golang sql string conversion scan error

查詢sqlite3數據庫中的行時收到以下錯誤:

sql: Scan error on column index 3: converting string "" to a int64: strconv.ParseInt: parsing "": invalid syntax

查詢本身可以工作,因為它可以返回查詢的數據。 我應該注意,數據庫中的每一行都包含幾行包含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)
}

它依賴於以下常量和變量:

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

對於錯誤的任何幫助或見解,我們將不勝感激!

似乎您的某一列(很可能是Rsvp )以字符串類型而非int的形式存儲,並且設置為""而不是null

因此,您必須將Rsvp (可能是另一列)更改為sql.NullString ,重做數據庫以使其具有空值,而不是數字字段的空字符串,或者如果您認為這是驅動程序中的錯誤,請在其跟蹤器上打開一個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM