Golang sqldatabase行。下一步
行。下一行是否转到列表的末尾,而不让您返回到开头?我想运行一个查询,检查数据库中是否有特定对象的数据。如果有那个对象,我想更新它。如果它不在那里,我想插入一个新行 所以我这样做:Golang sqldatabase行。下一步,go,Go,行。下一行是否转到列表的末尾,而不让您返回到开头?我想运行一个查询,检查数据库中是否有特定对象的数据。如果有那个对象,我想更新它。如果它不在那里,我想插入一个新行 所以我这样做: rows, err := db.Query(query) if err != nil { Error.Printf("error querying: %v", err) } if !rows.Next() { // insert ne
rows, err := db.Query(query)
if err != nil {
Error.Printf("error querying: %v", err)
}
if !rows.Next() {
// insert new data
}
就像我所期望的那样,它自己工作。但是,如果我改为这样做,并且在代码片段的结尾更符合逻辑:
rows, err := db.Query(query)
if err != nil {
Error.Printf("error querying: %v", err)
}
if !rows.Next() {
// insert new data
}
for rows.Next() {
fmt.Println("-----")
// do update
}
我的for rows.Next()从未被输入。如果我为行移动
。下一步()
块,位于If!rows.Next()
block,它确实可以按预期工作。那么,当您调用Next()时,您是否需要执行某些操作才能再次读取查询?您可能需要这样的操作:
rows, err := db.Query(query)
if err != nil {
Error.Printf("error querying: %v", err)
}
shouldinsert := true
for rows.Next() {
shouldinsert = false
fmt.Println("-----")
// do update
}
if shouldinsert {
// insert new data
}
rows.Next()
推进结果集索引(如果可以)。如果成功,则返回true;如果失败,则返回false(即,没有更多数据)。如果不推进该索引,就无法检查是否有更多数据,因此您对行的第一次调用。Next()
除了检查是否有数据外,还可以推进该索引。如果只返回一行,则条件将为false(有数据),但循环不会发生(在第一行之后没有更多的数据,条件在其检查中超前)。