Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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
使用Go检查sqlite db中是否存在值_Sql_Sqlite_Go - Fatal编程技术网

使用Go检查sqlite db中是否存在值

使用Go检查sqlite db中是否存在值,sql,sqlite,go,Sql,Sqlite,Go,我正在编写代码,用Go管理sqlite数据库中的用户 我试图检查用户名是否被占用,但我的代码很难看 我的桌子看起来像: id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE, password TEXT 我会检查用户名是否带有: func UserExists(db * sql.DB, username string) bool { sqlStmt := `SELECT username FROM

我正在编写代码,用Go管理sqlite数据库中的用户

我试图检查用户名是否被占用,但我的代码很难看

我的桌子看起来像:

    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username TEXT UNIQUE,
    password TEXT
我会检查用户名是否带有:

func UserExists(db * sql.DB, username string) bool {
    sqlStmt := `SELECT username FROM userinfo WHERE username = ?`
    count := 0
    rows, err := db.Query(sqlStmt, username)
    Check(err)
    for rows.Next() {  // Can I just check if rows is non-zero somehow?
        count++
    }
    return len(rows) != 0
}
是否有更好的查询可以告诉我用户名值是否以更直接的方式存在于表中?或者有没有更好的方法来检查行是否非零?

用于最多查询一行。如果查询不返回任何行,则返回sql.ErrNoRows

用于查询最多一行。如果查询不返回任何行,则返回sql.ErrNoRows


我知道这有点陈旧,但我看不到任何清晰的答案。请注意下面的if rows.Next语句,如果有行或没有行,它将返回布尔值:

package main

import (
    "database/sql"
    _ "github.com/mattn/go-sqlite3"
    "log"
)

func main() {
    exists, _ := SelectDBRowExists(`SELECT * FROM GEO_VELOCITY_EVENTS WHERE USERNAME='bob'`)
    log.Println(exists)
}

func SelectDBRowExists(query string) (bool, error) {

    DbConn, err := sql.Open("sqlite3", "/path/to/your/sql.sqlite3")
    if err != nil {
        return false, err
    }
    defer DbConn.Close()
    err = DbConn.Ping()

    if err != nil {
        return false, err
    }

    rows, err := DbConn.Query(query)

    if rows.Next() {
        return true, nil
    } else {
        return false, nil
    }

    defer rows.Close()

    return false, nil
}

我知道这有点陈旧,但我看不到任何清晰的答案。请注意下面的if rows.Next语句,如果有行或没有行,它将返回布尔值:

package main

import (
    "database/sql"
    _ "github.com/mattn/go-sqlite3"
    "log"
)

func main() {
    exists, _ := SelectDBRowExists(`SELECT * FROM GEO_VELOCITY_EVENTS WHERE USERNAME='bob'`)
    log.Println(exists)
}

func SelectDBRowExists(query string) (bool, error) {

    DbConn, err := sql.Open("sqlite3", "/path/to/your/sql.sqlite3")
    if err != nil {
        return false, err
    }
    defer DbConn.Close()
    err = DbConn.Ping()

    if err != nil {
        return false, err
    }

    rows, err := DbConn.Query(query)

    if rows.Next() {
        return true, nil
    } else {
        return false, nil
    }

    defer rows.Close()

    return false, nil
}

只要您只关心数据库中是否存在一个信息。我发现这种方法非常简单有效

func emailExists(email string) bool {
    row := db.QueryRow("select user_email from users where user_email= ?", email)
    checkErr(err)
    temp := ""
    row.Scan(&temp)
    if temp != "" {
        return true
    }
    return false
}
如果你注意到我只得到一排。 我的查询结果被扫描到一个临时变量中

然后我检查temp变量是否为空


如果不为空,则返回true。

只要您只关心数据库中是否存在一个信息。我发现这种方法非常简单有效

func emailExists(email string) bool {
    row := db.QueryRow("select user_email from users where user_email= ?", email)
    checkErr(err)
    temp := ""
    row.Scan(&temp)
    if temp != "" {
        return true
    }
    return false
}
如果你注意到我只得到一排。 我的查询结果被扫描到一个临时变量中

然后我检查temp变量是否为空


如果不为空,则返回true。

不确定为什么将其标记为正确答案。此代码无效。感谢您的注意!我为什么发布这样的代码我不确定为什么这被标记为正确答案。此代码无效。感谢您的注意!我为什么发布这样的代码o