Ошибка записи в БД SQLite - PullRequest
0 голосов
/ 11 мая 2011

Я впервые использую SQL, и я подумал, что все сделал правильно, но постоянно получаю сообщение об ошибке, что моя таблица не существует.Чтобы создать таблицу, я сделал:

CREATE TABLE "Users" ("UserID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "UserName" VARCHAR, "Password" VARCHAR)

Итак, у меня есть таблица с именем Users

Чтобы записать в таблицу, я вызываю это:

- (void) addUser {

if(addStmt == nil) {
    const char *sql = "insert into Users(UserName, Password) values (?, ?)";
    if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK)
        NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));
}

sqlite3_bind_text(addStmt, 1, [userName UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(addStmt, 2, [password UTF8String], -1, SQLITE_TRANSIENT);

if(SQLITE_DONE != sqlite3_step(addStmt))
    NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
else
    //SQLite provides a method to get the last primary key inserted by using sqlite3_last_insert_rowid
    userID = sqlite3_last_insert_rowid(database);

//Reset the add statement.
sqlite3_reset(addStmt);
}

КогдаЯ запускаю это, оно закрывает приложение и выдает мне ошибку Error while creating add statement. 'no such table: Users'

Мне понадобилось несколько дней, чтобы добраться до этого места, и я понятия не имею, где его взять.Что я могу сделать, чтобы это исправить?

Редактировать: Вот как я импортирую свою БД в свой файл AppDelegate

- (NSString *) getDBPath {

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
return [documentsDir stringByAppendingPathComponent:@"UserDatabase.sqlite"];
}

1 Ответ

1 голос
/ 11 мая 2011

Я почти уверен, что вы получите эту ошибку, потому что sqlite не смог найти ваш файл sqlite , поэтому он создает пустую базу данных.И в пустой базе данных он, очевидно, не найдет вашу таблицу, поэтому возникает ошибка.

Поэтому вы должны сосредоточиться на правильном достижении файла базы данных.Из вашего кода кажется, что вы читаете его из каталога документов - но ваш db-файл не получится, если вы не скопируете его в этот каталог.

Попробуйте добавить настоящий файл sqlite в ваш пакет.Затем используйте этот код, чтобы найти путь к файлу sqlite:

databasePath = [[NSBundle mainBundle] pathForResource:@"UserDatabase" ofType:@"sqlite"];

И я считаю, что это решит вашу проблему.Однако вы должны заметить, что если вы хотите сохранить изменения в этой базе данных, и я думаю, что вы хотите, вы бы не копировали файл в каталог документов, потому что связанный файл доступен только для чтения.В этом случае вы будете искать файл sqlite в пути к каталогу, а если он не найден (вероятно, первое использование приложения) - скопируйте его в этот каталог из пакета.

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