#objective-c #ios4 #sqlite
#objective-c #ios4 #sqlite
Вопрос:
У меня есть страница входа в систему, где пользователь должен ввести имя пользователя и пароль для доступа к приложению, в первый раз пользователь может ввести любое имя пользователя и пароль по желанию пользователя.
Первый сценарий:
В первый раз мне нужно вставить данные для входа в БД
Второй сценарий:
И во второй раз, когда пользователь входит в систему, мне нужно выбрать данные пользователя из базы данных вместо повторной вставки.
Вышеуказанные 2 операции я выполняю при нажатии кнопки входа.
Пожалуйста, помогите мне, как добиться процесса
Спасибо.
Ответ №1:
Для этого потока вашего приложения вам необходимо создать таблицу с 4 полями.
1.id 2.имя пользователя 3.пароль 4.флаг (значение по умолчанию равно 0)
затем добавьте некоторые значения дампа в поля имени пользователя и пароля, кроме флага (для флага = 0). После этого вам нужно скопировать этот SQLiteDB в приложение.
в первый раз вам нужно выбрать имя пользователя, пароль и флаг из базы данных ur. затем проверьте значение флага, если флаг = 0 , затем обновите значения имени пользователя, пароля и флага = 1.
Во второй раз он снова проверяет поле флага и переходит к другой части, где вам нужно сравнить с введенным именем пользователя и паролем в текстовом поле. если он существует, он является действительным пользователем, иначе он не является действительным пользователем
Ответ №2:
Сначала создайте пользовательский класс UserDetails с помощью NSString userName и userPassword.
Затем вы можете попробовать что-то подобное для чтения данных
- (UserDetails *)getUserDetails:(NSString *)userLogin password:(NSString *)userPassword
{
UserDetails *retVal;
sqlite3 *database;
NSString *dbPath = @"your_db_path";
if(sqlite3_open([dbPath UTF8String], amp;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, amp;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 будет выглядеть примерно так
Вставить в значения Users(UserLogin, userPassword) (‘%@’, ‘%@’)
Комментарии:
1. но я хочу, чтобы 2 операции выполнялись одним методом или одним действием? в первый раз должна выполняться опция insert, в следующий раз должна работать только операция select.
2. затем вы можете добавить, что если select возвращает 0 записей, вы выполняете sql-запрос с вставкой тех же данных, что и новые записи