Golang mysql select *语句只返回第一个值

问题描述 投票:-3回答:1

我试图找出我的代码有什么问题。当我尝试扫描()我的mysql查询返回的每一行并在我创建的结构中写入它的值时,只有第一列的第一个值将显示在我的结构中,其他一切只是“”。请帮我。我完全无能为力。

    type Device struct{
    device_id string
    device_name string
    device_type string
    device_currentstate string
    device_tobestate string
    house_name string
    room_id string}

func GetUnmappedDevicesFromDb(houseName string) []Device {
db, err := sql.Open("mysql", connectionString)
db.Ping()
statement := "SELECT device_id, device_name, device_type, device_currentstate, device_tobestate, house_name, room_id FROM smarthomed.devices WHERE house_name='" + houseName + "' AND room_id IS NULL;"
stmt, err := db.Prepare(statement)
defer stmt.Close()
rows, err := stmt.Query()
defer rows.Close()
res := []Device{}
for rows.Next() {
    d := Device{}
    err = rows.Scan(&d.device_id, &d.device_name, &d.device_type, &d.device_currentstate, &d.device_tobestate, &d.house_name, &d.room_id)
    res = append(res, d)
    if err != nil {
        fmt.Println(err)
    }
}
if err != nil {
    fmt.Println(err)
}
defer db.Close()
return res

}

struct after scan() method

device table in mysql database

mysql sql go
1个回答
0
投票

我在我的struct中将字符串更改为sql.NullString,现在从数据库中获取所有数据。谢谢@mkopriva的帮助。

type Device struct {
device_id           string
device_name         sql.NullString
device_type         string
device_currentstate sql.NullString
device_tobestate    sql.NullString
house_name          string
room_id             sql.NullString

}

© www.soinside.com 2019 - 2024. All rights reserved.