2016-05-10 3 views
2

私はGoを使用してsqliteデータベースのユーザーを管理するコードを作成しています。Goを使用してsqlite dbに値が存在するかどうかを確認

ユーザー名が使用されているかどうかを確認しようとしていますが、コードが醜いです。

私のテーブルには、次のようになります。

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 
} 

私は、ユーザー名の値が存在する場合、それは私に言うだろう使用することができ、より良いクエリがありますテーブルの中でもっと先見の明な方法で?または、rowsがゼロでないかどうかを確認する良い方法はありますか?

答えて

2

QueryRowを使用すると、最大で1行しかクエリできません。クエリが行を返さない場合は、を返します。

func UserExists(db * sql.DB, username string) bool { 
    sqlStmt := `SELECT username FROM userinfo WHERE username = ?` 
    count := 0 
    _, err := db.QueryRow(sqlStmt, 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 
} 
関連する問題