2012-03-28 4 views
1

Я пытаюсь читать из файла базы данных (выполняя простые функции выбора всех функций).Чтение из SQLite - FMDB - Новичок

Я использую FMDB.

Вот как я создал БД;

Pro:~ dd$ sqlite3 db.db 
SQLite version 3.7.7 2011-06-25 16:35:41 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 
sqlite> create table cus(id integer primary key, firstname varchar(30)); 
sqlite> inser into cus(firstname)values('f'); 
Error: near "inser": syntax error 
sqlite> insert into cus(firstname)values('f'); 
sqlite> select * from cus; 
1|f 
sqlite> 

Я скопировал файл (db.db) в папку ресурсов в xCode. изменилось имя файла db на db.db в делегате приложения. Код для моей программы точно такой же, как this tutorial.

Вот код;

-(NSMutableArray *) getCustomers 
{ 
    NSMutableArray *customers = [[NSMutableArray alloc] init]; 


    NSString * path = [(AppDelegate*)[[UIApplication sharedApplication]delegate]databasePath]; 
    NSLog(@"DB path %@ ",path); 
    FMDatabase *db = [FMDatabase databaseWithPath:path]; 

    [db open]; 

    FMResultSet *results = [db executeQuery:@"SELECT * FROM cus"]; 
    NSLog(@"result %@ ",results); 
    while([results next]) 
    { 
     NSLog(@"result %@ ",results); 
     Customer *customer = [[Customer alloc] init]; 

     customer.customerId = [results intForColumn:@"id"]; 
     customer.firstName = [results stringForColumn:@"firstname"]; 

     [customers addObject:customer]; 

    } 

    [db close]; 

    return customers; 

} 

Моя проблема;

Несмотря на то, что в БД имеется 1 запись, результат Select составляет NULL. Почему это и как я могу исправить?

+1

Вы можете выполнить запрос с еще одним параметром ** Ошибка ** заявление https://github.com/ ccgus/fmdb Выполнение запросов возвращает объект FMResultSet в случае успеха и nil после сбоя. Подобно выполнению обновлений, существует вариант, который принимает параметр NSError **. В противном случае вы должны использовать методы -lastErrorMessage и -lastErrorCode, чтобы определить, почему запрос не удался. –

+0

Согласен. Используйте lastErrorMessage/Code, чтобы узнать, в чем проблема с вашей базой данных. Вы также должны проверить, создана ли база данных, и вы не отправляете executeQuery в объект nil. Путь может быть неправильным. – Eugene

+0

Где я должен иметь этот код, не могли бы вы мне помочь изменить свой код? – Illep

ответ

1

Предполагая, что база данных была создана и успешно импортированы в проект, выполните следующие действия:

-(NSMutableArray *) getCustomers 
{ 
NSMutableArray *customers = [[NSMutableArray alloc] init]; 
NSString * path = [(AppDelegate*)[[UIApplication sharedApplication]delegate]databasePath]; 
NSLog(@"DB path %@ ",path); 
FMDatabase *db = [FMDatabase databaseWithPath:path]; 

if(![db open]) 
{ 
    NSLog(@"Could not open DB, try again"); 
    return nil; 
} 

FMResultSet *results = nil; 
results = [db executeQuery:@"SELECT * FROM cus"]; 
NSLog(@"result %@ ",results); 
while([results next]) 
{ 
    Customer *customer = [[Customer alloc] init]; 

    customer.customerId = [results intForColumn:@"id"]; 
    customer.firstName = [results stringForColumn:@"firstname"]; 

    NSLog(@"Customer object %@", customer); 
    [customers addObject:customer]; 
    [customer release]; 
} 

[db close]; 

return customers; 
} 
+0

код для получения данных верен, если у вас все еще есть проблемы, вероятно, что путь к базе данных неверен. –

1

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

Смежные вопросы