Использование запроса select

#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-запрос с вставкой тех же данных, что и новые записи