我在用 gorp 更新我的 postgresql 数据库中的一行时遇到问题,我成功地使用 db.Exec 运行更新,所有列都用正确的信息更新,而 gorp 我只能更新非 sql.Null* 字段,而其余保持不变。var db *sql.DBvar dbmap *gorp.DbMapfunc getDB() (*sql.DB, *gorp.DbMap) { if db == nil { var err error db, err = sql.Open("postgres", "postgres://xxxxxxxx") db.SetMaxOpenConns(5) db.SetMaxIdleConns(0) dbmap = &gorp.DbMap{Db: db, Dialect: gorp.PostgresDialect{}} dbmap.AddTableWithName(WirelessNetwork{}, "network").SetKeys(true, "Id") if err != nil { log.Panic(err) } } return db, dbmap}type WirelessNetwork struct { Id int `db:"id"` Ssid string `db:"ssid"` Lat sql.NullFloat64 `db:"lat"` Lon sql.NullFloat64 `db:"lon"` Sec sql.NullString `db:"sec"` Bssid sql.NullString `db:"bssid"` Channel sql.NullInt64 `db:"channel"` Found bool `db:"found"` Datefirst sql.NullString `db:"datefirst"` Datelast sql.NullString `db:"datelast"`}npr := new(WirelessNetwork)npr.Id = getNetworkId(ssid)npr.Ssid = ssidnpr.Lat = dbProbes[index].Latnpr.Lon = dbProbes[index].Lonnpr.Sec = dbProbes[index].Secnpr.Bssid = dbProbes[index].Bssidnpr.Channel = dbProbes[index].Channelnpr.Found = dbProbes[index].Foundnpr.Datefirst = dbProbes[index].Datefirstnpr.Datelast = dbProbes[index].Datelastnpr.Found = true这有效db, _ := getDB()db.Exec("UPDATE network SET ssid=$1,lat=$2,lon=$3,sec=$4,channel=$5,found=$6,datefirst=$7,datelast=$8,bssid=$9 WHERE id=$10", npr.Ssid, npr.Lat.Float64, npr.Lon.Float64, npr.Sec.String, npr.Channel.Int64, npr.Found, npr.Datefirst.String, npr.Datelast.String, npr.Bssid.String, getNetworkId(ssid))这不func updateNetwork(n *WirelessNetwork) { _, dbmap := getDB() _, err := dbmap.Update(n) if err != nil { log.Fatal("updateNetwork - ", err) }}
2 回答
绝地无双
TA贡献1946条经验 获得超4个赞
sql.Null*
类型是具有Valid
布尔字段的结构,它告诉值是否为 NULL。boolean 的初始值为 false,因此除非您明确验证数据,否则您将向数据库发送 NULL。你没有告诉我们,dbProbes
它是什么以及如何获取数据,但如果它是用类似的东西初始化的
dbProbes[index].Lat = sql.NullFloat64{Float64: lat}
thenValid
仍然是错误的,您需要手动验证您的数据:
dbProbes[index].Lat = sql.NullFloat64{Float64: lat, Valid: true}
或使用以下Scan
方法:
err = dbProbes[index].Lat.Scan(lat)
- 2 回答
- 0 关注
- 195 浏览
添加回答
举报
0/150
提交
取消