0
我想用SQLite DB設計登錄和註冊表單。我做了三個字段的註冊表和兩個字段的登錄表。如何遍歷SQLite行?
Registration form:
User Name:
Password:
RetypePassword:
Login form:
User Name:
Password:
如果任何用戶嘗試登錄的第一次,我們應該提供一個消息register.i.e,我們需要通過報名表進行迭代,並檢查登錄字段是否已經存在與否。
所以在這裏我錯過了邏輯(循環)遍歷註冊表的所有記錄。
- (void) loginBtn:(id)sender
{
const char *dbpath = [_databasePath UTF8String];
sqlite3_stmt *statement;
NSMutableArray *arr=[[NSMutableArray alloc]init];
if (sqlite3_open(dbpath, &_registerDB) == SQLITE_OK)
{
NSString *querySQL = [NSString stringWithFormat:@"SELECT * FROM registertable;"];
const char *query_stmt = [querySQL UTF8String];
if (sqlite3_prepare_v2(_registerDB,query_stmt, -1, &statement, NULL) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
NSString *regUserName = [[NSString alloc]initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)];
NSString *regPassword = [[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statement, 1)];
NSString *str=[NSString stringWithFormat:@"%@%@",regUserName,regPassword];
[arr addObject:str];
//************************LOOP ?????????????
for(int i=o;i<arr.count;i++){
if([loginUserTxtFld.text isEqualToString:??????] && [loginPasswordTxtFld isEqualToString:??????]
{
NSLog(@"login successful");
}
else{
NSLog(@"You have not yet registered");
}
}
_statusLabel.text = @"Match found";
} else {
_status.text = @"Match not found";
_regUserNameTxtFld.text = @"";
_regPwdTxtFld.text = @"";
}
sqlite3_finalize(statement);
}
sqlite3_close(_registerDB);
}
}
我需要改變以通過選定的行進行循環?
爲什麼你需要迭代循環?只是SELECT * FROM registertable WHERE用戶名=%@「同時將你的userName字段定義爲索引 – 2014-11-08 15:54:58
@RyanHeitner更正,使用'WHERE'子句爲你完成工作,但絕不要使用'stringWithFormat'來建立SQL, 'printf-style formatters。使用'?'佔位符並將值綁定到'sqlite3_bind_text'。或者使用類似[FMDB](https://github.com/ccgus/fmdb)的方式來處理這個麻煩。 – Rob 2014-11-08 16:02:55