2012-03-28 8 views
1

Ich versuche, aus einer Datenbankdatei zu lesen (Ausführen einer einfachen Auswahl aller Funktionen).Lesen von SQLite - FMDB - Anfänger

Ich verwende FMDB.

Hier ist, wie ich die DB erstellt habe;

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> 

Ich habe die Datei (db.db) in meinen Ressourcenordner in xCode kopiert. den Namen der db-Datei in db.db im App-Delegaten geändert. Code für mein Programm ist genau das gleiche wie this tutorial.

Hier ist der Code;

-(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; 

} 

Mein Problem;

Obwohl es 1 Datensatz in der DB gibt, ist das Ergebnis der Select-Anweisung NULL. Warum ist das und wie kann ich das korrigieren?

+1

Können Sie Abfrage mit einem weiteren Parameter ausführen ** Fehler ** Anweisung von https://github.com/ ccgus/fmdb Das Ausführen von Abfragen gibt bei Erfolg ein FMResultSet-Objekt und bei einem Fehler null zurück. Wie bei der Ausführung von Aktualisierungen gibt es eine Variante, die den Parameter NSError ** akzeptiert. Andernfalls sollten Sie die Methoden -lastErrorMessage und -lastErrorCode verwenden, um festzustellen, warum eine Abfrage fehlgeschlagen ist. –

+0

stimme ich zu. Verwenden Sie den lastErrorMessage/Code, um zu sehen, was das Problem mit Ihrer Datenbank ist. Sie sollten auch überprüfen, ob die Datenbank überhaupt erstellt wurde und Sie executeQuery nicht an ein Nil-Objekt senden. Der Pfad ist möglicherweise falsch. – Eugene

+0

Wo sollte ich diesen Code haben, könnten Sie mir helfen, meinen Code zu bearbeiten? – Illep

Antwort

1

Unter der Annahme, dass die Datenbank erstellt und wurde in das Projekt erfolgreich importiert, versuchen Sie Folgendes:

-(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

der Code zum Abrufen der Daten ist korrekt, wenn Sie immer noch Probleme haben, ist es wahrscheinlich, dass der Pfad zur Datenbank falsch ist. –

1

Ich hatte das gleiche Problem, aber es wurde geschafft, dies zu beheben, indem Sie den Pfad richtig einrichten. In der Pfadangabe könnte also etwas nicht stimmen. Stellen Sie sicher, dass Ihr Datenbankpfad perfekt ist. Und wie alle empfehlen, empfehle ich Ihnen, Fehleranweisungen zu verwenden, um das Problem einzugrenzen. Wünscht sich!!

Verwandte Themen