2
在sqlite3的數據庫查詢行時我收到以下錯誤:如何修復golang SQL字符串轉換掃描錯誤
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,,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具有以下結構定義
(I加入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)
}
其依賴於下面的C onstant和var:
const userSelect = "SELECT * FROM rsvp WHERE email = ?"
var userStatement *sql.Stmt
任何幫助或對錯誤的深入瞭解都非常感謝!
嘗試在您的SQL SELECT語句中顯式使用而不是使用'*'。這將有助於排除列不匹配。 – jmaloney 2014-09-27 20:02:48
我已經使SQL SELECT顯式,但仍然收到相同的錯誤:'sql:掃描列索引3錯誤:將字符串「」「轉換爲int64:strconv.ParseInt:解析」「:無效語法' – surfearth 2014-09-27 20:14:39