Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Golang sqldatabase行。下一步_Go - Fatal编程技术网

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(有数据),但循环不会发生(在第一行之后没有更多的数据,条件在其检查中超前)。