Я пытаюсь извлечь данные из базы данных sqlite. Я добавил файл «libsqlite3.0.dylib» и скопировал созданную SQL-версию в папку приложения. Я создал два метода в файле appdelegate. ОниВ Sqlite iOS нет таблицы
//To copy DB
- (void) copyDatabaseIfNeeded {
//Using NSFileManager we can perform many file system operations.
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSString *dbPath = [self getDBPath];
BOOL success = [fileManager fileExistsAtPath:dbPath];
if(!success) {
NSLog(@"DB File %@ does not exists", dbPath);
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"tms.sqlite"];
success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];
NSLog(@"Successfully copied db file to path %@", dbPath);
if (!success)
NSLog(@"Failed to create writable database file with message '%@'.", [error localizedDescription]);
} else {
NSLog(@"DB File %@ already exists", dbPath);
}
}
//To get DB path
-(NSString *)getDBPath{
NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDir=[paths objectAtIndex:0];
return [documentDir stringByAppendingPathComponent:@"sampleDB.sqlite"];
}
я назвал copyDatabaseIfNeeded() в didFinishLaunchingWithOptions и я добавил один метод в ViewController.m файле. То есть
-(void)Display
{
SqlitAppDelegate *appDelegate=(SqlitAppDelegate *)[UIApplication sharedApplication].delegate;
NSString *dbPath=[appDelegate getDBPath];
if (sqlite3_open([dbPath UTF8String], &myDB) == SQLITE_OK)
{
NSLog(@"Database opned successflly");
const char *sql = "select * from sampleTable";
NSLog(@"%s",sql);
sqlite3_stmt *selectstmt;
if(sqlite3_prepare_v2(myDB, sql, -1, &selectstmt, NULL) == SQLITE_OK)
NSLog(@"Prepared successfully");
else
{
NSLog(@"Preparation failed");
NSLog(@"%s",sqlite3_errmsg(myDB));
NSLog(@"%d",sqlite3_errcode(myDB));
}
}
else
NSLog(@"Couldn't open database");
}
Я назвал этот метод методом didViewLoad.
Я получаю follwing выход:
- 2013-03-20 12: 02: 24,026 SqliteSample2 [951: 11303] База данных opned successflly
- 2013-03-20 12: 02: 24,027 SqliteSample2 [ 951: 11303] выберите * от sampleTable
- 2013-03-20 12: 02: 24,028 SqliteSample2 [951: 11303] Получение удалось
- 2013-03-20 12: 02: 24,029 SqliteSample2 [951: 11303] нет такого таблица: sampleTable
- 2013-03-20 12: 02: 24.029 SqliteSam ple2 [951: 11303] 1
Кто-нибудь скажет, что я делаю ??????
Спасибо заранее ...........
Удалено ли существующее приложение с устройства/симулятора? Новые изменения в базе данных будут отображаться только при установке новой сборки. Функция копирования базы данных будет иметь только новую копию, если файл не существует. –
Одним словом, удалите приложение с устройства/симулятора, очистите и перестройте проект и запустите на устройстве/симуляторе. – Raptor
Сделайте одно дело с dbPath вручную и проверьте, есть ли какая-либо база данных, созданная или нет. Если вы не копируете созданную базу данных вручную и не проверяете –