我有一个登录页面,用户必须输入用户名&用于访问应用程序的密码,用户可以在第一时间输入任何用户名和密码。用户愿望的密码。
第一种情景:
我第一次需要将登录详细信息插入数据库
第二种情景:
当用户第二次登录时,我需要从db中选择用户详细信息,而不是再次插入。
我在登录按钮操作中正在进行上述两项操作。
请帮助我了解如何实现这个过程
感谢。
答案 0 :(得分:2)
对于此应用流程,您需要创建一个包含4个字段的表格。
1.id 2.username 3.password 4.flag(默认值为0)
然后向用户名和密码字段添加一些转储值,除了flag(for flag = 0)。之后,您需要将sqliteDB复制到应用程序中。
第一次需要从ur db中选择用户名密码和标志。 然后检查flag的值,如果flag = 0,则更新username,password和flag = 1的值。
第二次再次检查标志字段并转到else部分,您需要在文本字段中与输入的用户名和密码进行比较。如果存在,则他是有效用户,否则他不是有效用户
答案 1 :(得分:0)
首先使用NSString userName和userPassword创建自定义类UserDetails。
然后你可以尝试这样的东西来读取数据
- (UserDetails *)getUserDetails:(NSString *)userLogin password:(NSString *)userPassword
{
UserDetails *retVal;
sqlite3 *database;
NSString *dbPath = @"your_db_path";
if(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK){
const char *sql_statement = [[NSString stringWithFormat:@"select * from Users where UserLogin = '%@' and UserPassword = '%@'", userLogin, userPassword] UTF8String];
sqlite3_stmt *compiled_statement;
if(sqlite3_prepare_v2(database, sql_statement, -1, &compiled_statement, NULL) == SQLITE_OK){
while(sqlite3_step(compiled_statement) == SQLITE_ROW){
[retVal setUsername:[NSString stringWithUTF8String:(const char *)sqlite3_column_text(compiled_statement, 0)]];
[retVal setPassword:[NSString stringWithUTF8String:(const char *)sqlite3_column_text(compiled_statement, 1)]];
}
sqlite3_finalize(compiled_statement);
sqlite3_close(database);
}
}
return retVal;
}
对于插入数据,您可以使用几乎相同的代码但不返回值,因此如果您需要,方法将返回void或某些控制值,并且只有在执行时有错误,而sql语句将类似于
插入用户(UserLogin,UserPassword)值('%@','%@')