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
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 把Excel导入MATLAB显示错误怎么解决?
  • ¥15 Java中消息和缓存如何使用
  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx