Я делаю приложение для iPhone для школьного проекта, который читает и записывает в базу данных. Мне удалось заставить мой код писать, но он не будет читать. Ниже приведен код, я использую для чтения:Проблемы при чтении из базы данных в приложении для iPhone
NSString * paths=[self getWritableDBPath];
const char *dbpath = [paths UTF8String];
sqlite3_stmt *statement;
static sqlite3 *database = nil;
if (sqlite3_open(dbpath, &database) == SQLITE_OK)
{
NSString *querySQL = [NSString stringWithFormat: @"SELECT questionright, totalquestions, FROM results", nil];
const char *query_stmt = [querySQL UTF8String];
if (sqlite3_prepare_v2(database, query_stmt, -1, &statement, NULL) == SQLITE_OK)
{
while(sqlite3_step(statement) == SQLITE_ROW)
{
//code...
}
sqlite3_finalize(statement);
}
sqlite3_close(database);
}
Вот getWritableDBPath:
-(NSString *) getWritableDBPath {
NSString *myDB = @"appData.db";
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
return [documentsDir stringByAppendingPathComponent:myDB];
}
Причина, по которой не работает, что sqlite3_prepare_v2 если заявление никогда не удовлетворяется.
Когда я пишу в базу данных, я копирую его в документы.
Я уверен, что таблица результатов существует, поскольку я могу написать ей. Вот оригинальное заявление SQL:
DROP TABLE IF EXISTS "Questions";
CREATE TABLE "Questions" ("QuestionID" INTEGER PRIMARY KEY NOT NULL , "Question" TEXT, "RightAnswer" TEXT, "WrongAnswer1" TEXT, "WrongAnswer2" TEXT, "Done" BOOL, "Catagory" TEXT, "Audio" INTEGER);
DROP TABLE IF EXISTS "Results";
CREATE TABLE "Results" ("ResultID" INTEGER PRIMARY KEY NOT NULL , "QuestionRight" INTEGER, "TotalQuestions" INTEGER, "Catagory" TEXT);
Я нашел аналогичный вопрос здесь, но не думаю, что ответы были, что отношение ко мне.
Благодарим за помощь.
Какое значение возвращает функция 'sqlite_prepare_v2'? Сравните это со списком кодов ошибок, найденных здесь (http://www.sqlite.org/rescode.html) и отправьте ответ. Кроме того, не используйте '[NSString stringWithFormat:]', если у вас нет формата. Просто используйте 'const char * query_stmt =" SELECT questionright, totalquestions, FROM results ";' –
sqlite_prepare_v2 возвращает значение 1. Спасибо за советы по использованию const char. –
1 является 'SQLITE_ERROR', который, я боюсь, является действительно общим кодом ошибки: *** Код результата SQLITE_ERROR является общим кодом ошибки, который используется, когда нет другого более конкретного кода ошибки. *** –