SQLite sqlite3_prepare_v2 kein Fehler, aber nicht ok-weder
Hey Leute, ich bin nur spielen, um mit SQLite-also das ist neu für mich. Ich habe eine Ansicht, in der Personen, die Daten können sowohl gespeichert und gefunden werden. Die speichern-Funktion und die finden-Funktion funktioniert perfekt. Jetzt habe ich eine neue Ansicht mit einer tableView in es. Ich möchte alle Personen in der Kontakte-Tabelle und füllen Sie die Liste mit ihm.
Bis jetzt habe ich:
-(void)viewWillAppear:(BOOL)animated {
const char *dbpath = [databasePath UTF8String];
sqlite3_stmt *statement;
if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK)
{
NSLog(@"Opened DB");
NSString *querySQL = [NSString stringWithFormat:@"SELECT name FROM contacts"];
const char *query_stmt = [querySQL UTF8String];
NSLog(@"could not prepare statement: %s\n", sqlite3_errmsg(contactDB));
if (sqlite3_prepare_v2(contactDB, query_stmt, -1, &statement, NULL) == SQLITE_OK)
//if (sqlite3_step(query_stmt) == SQLITE_DONE)
{
//NSLog(@"SQLite OK");
NSLog(@"SQLite ok");
//if (sqlite3_step(statement) == SQLITE_ROW)
//{
while(sqlite3_step(statement) == SQLITE_ROW) {
NSLog(@"SQLite ROW");
NSString *person = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)];
[personsList addObject:person];
}
//} else {
// NSLog(@"Emtpy list");
//}
sqlite3_finalize(statement);
}
sqlite3_close(contactDB);
}
NSLog(@"Calling reload");
NSLog(@"%@", personsList);
[tabelView reloadData];
}
Dies ist alles in viewWillAppear. Wenn die Ansicht geladen wird und fertig, das log sagt:
2011-05-06 10:45:26.976 database[1412:207] Opened DB
2011-05-06 10:45:26.978 database[1412:207] could not prepare statement: not an error
2011-05-06 10:45:26.979 database[1412:207] Calling reload
2011-05-06 10:45:26.979 database[1412:207] (
)
So scheint es, die Aussage ist nicht ein Fehler, aber sqlite3_prepare_v2
ist nicht SQL_OK, nachdem alle. Keine Hilfe?
EDIT: In der vorherigen Ansicht, der Anweisung zum anlegen einer person: @"INSERT INTO CONTACTS (name, address, phone) VALUES (\"%@\", \"%@\", \"%@\")", name.text, address.text, phone.text];
Die Anweisung für die Suche nach jemanden ist: @"SELECT address, phone FROM contacts WHERE name=\"%@\"", name.text];
Diesen beiden Aussagen zu arbeiten und die Daten angezeigt werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
@joetjah ich Ihren code benutzt, um die Ergebnisse abrufen und es funktionierte gut
Vergleichen Sie den code, Der wahrscheinliche Fehlerquelle sein könnte
1] Daten nicht richtig gespeichert und damit auch nichts abgeholt werden.
2] databasePath wird Leerstelle (was ich bezweifle wie Sie, bekommen, Öffnen, Db, log)
Den Tisch Kontakt erstellt mit "CREATE TABLE Kontakte (name text, Alter integer)"
versuchen Sie dieses einmal und lassen Sie mich wissen, wenn es funktioniert.
"CREATE TABLE IF NOT EXISTS CONTACTS (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, ADDRESS TEXT, PHONE TEXT)";
. Die Sequenz um etwas hinzuzufügen, ist"INSERT INTO CONTACTS (name, address, phone) VALUES (\"%@\", \"%@\", \"%@\")", name.text, address.text, phone.text];
. Alles scheint merkwürdig zu u?Versuchen, diese,
statement
erklärt wurde, über die erste if-Anweisung, so dass das problem noch nicht da war 🙁Ich verwendet
const char *dbpath = [databasePath UTF8String];
, aber ich habe vergessen, den folgenden code oben:Dieser arbeitete für mich:
erstellen Sie die Tabelle in Ihrem didload Funktionen und fügen Sie diesen in (vorausgesetzt, Sie haben erklärt, die andere Tabelle Ansicht-Funktionen):