Что такое запрос для выбора строки таблицы, соответствующей двум ограничениям столбца в Sqlite - PullRequest
3 голосов
/ 05 августа 2011

Я пытался разработать программу входа в систему, которая работала бы с базой данных.Я использовал таблицу emplopyee, со столбцами «Userid», «Passwd» и «Name» (все три типа «VARCHAR»).В моей программе я добавил два текстовых поля: «имя пользователя» и «пароль».Я получил значения «username» и «password» и сохранил их в двух глобальных объектах (типа «NSString»).
Теперь я хотел бы выбрать «Name», которое соответствует указанным «Userid» и «Passwd».».Часть кода, которую я использовал по вышеуказанной причине, находится здесь:

sqlite3 *dB;
sqlite3_stmt *compiledStatement;
if(sqlite3_open([databasePath UTF8String], &dB)==SQLITE_OK){
    const char *sql="Select Name from employee Where Userid=? , Passwd=?";

           if(sqlite3_prepare_v2(dB, sql, -1, &compiledStatement, NULL)!=SQLITE_OK)
    NSAssert1(0,@"Error while reading Employee Name -->%s',sqlite3_errmsg(dB));
}
sqlite3_bind_text(compiledStatement,1,[txt UTF8String],-1,SQLITE_TRANSIENT);
   /*txt and txt1 are the global objects i told about they have the values of Userid  and Passwd from the texxt fields respectively*/
sqlite3_bind_text(compiledStatement,2,[txt1 UTF8String],-1,SQLITE_TRANSIENT);


if(SQLITE_DONE != sqlite3_step(compiledStatement))
 txt3 =[[NSString alloc] initWithUTF8String:(char*)sqlite3_column_text(compiledStatement,0)];


else
    NSAssert1(0, @"Error while getting the username '%s'", sqlite3_errmsg(dB));         
    sqlite3_reset(compiledStatement);

Она не содержит ошибок при компиляции, но приложение не работает, в запросе указывается какая-то ошибка (во время выполнения).если вы не можете разобраться с данными, я предоставлю вам весь код.

Я добавил подробности ошибки здесь:
эта ошибка возникает, если я использую "," (запятая) взапрос на выборку:

*** Завершение работы приложения из-за необработанного исключения
'NSInternalInconsistencyException', причина: 'Ошибка при чтении имени сотрудника ->' рядом ', ": синтаксическая ошибка' '

, и это происходит, когда я использую «И» в запросе выбора:

*** Завершение работы приложения из-за необработанного исключения
«NSInternalInconsistencyException», причина: 'Ошибка при получении имени пользователя' не ошибка ''

Ответы [ 2 ]

6 голосов
/ 05 августа 2011

Первый выпуск:

В предложении SQL WHERE, если у вас есть критерии, которым все должно соответствовать, вы используете И, а не запятую, чтобы объединить их:

SELECT Name FROM employee WHERE Userid=? AND Passwd=?

Если это не так, предложите отредактировать детали сообщения об ошибке во время выполнения в своем вопросе.

Для справки см. SQL как понят SQLite .

Вторая проблема:

Похоже, вы неправильно обрабатываете код возврата SQLITE_DONE из функции sqlite3_step () как «success» - сообщение «notошибка »является ключом.Возможно, возвращаемое значение может быть SQLITE_ROW - что означает, что запрос выполнен успешно, и что у вас есть данные для чтения?

0 голосов
/ 10 апреля 2013

В условии WHERE мы не можем добавить запятую (,), если у нас есть несколько параметров для сравнения. Выберите запрос должен быть как NSString * type = @ "Start"

@ "SELECT * FROM images WHERE image_status = 0 И image_id = 112 И image_type = type"

Мы можем добавить несколько AND, но не запятые.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...