dtmm0148603 2016-05-10 18:07
浏览 297
已采纳

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

I'm writing code to manage users in a sqlite database with Go.

I'm trying to check if a username is taken, but my code is ugly.

My table looks like:

    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username TEXT UNIQUE,
    password TEXT

And I check if a username is taken with:

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
}

Is there a better query I could use that would tell me if the username value exists in the table in a more staight forward way? Or is there a nicer way to check if rows is non-zero?

  • 写回答

1条回答 默认 最新

  • dqh19413 2016-05-10 18:43
    关注

    Use QueryRow to query at most one row. If the query doesn't return any row, it returns sql.ErrNoRows.

    func UserExists(db * sql.DB, username string) bool {
        sqlStmt := `SELECT username FROM userinfo WHERE username = ?`
        err := db.QueryRow(sqlStmt, username).Scan(&username)
        if err != nil {
            if err != sql.ErrNoRows {
                // a real error happened! you should change your function return
                // to "(bool, error)" and return "false, err" here
                log.Print(err)
            }
    
            return false
        }
    
        return true
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度