2012-04-01 7 views
2

Ich benutze SQLite-Datenbank. Das Problem besteht darin, dass Daten nicht in die Basis geschrieben werden. NSLog zeigt mir "Alles ok" und insertSQL ist auch korrekt aber immer noch ein Datensatz in der Datenbank ist nicht passiert. Mein Code:Schreiben in die SQLite-Datenbank. Etwas Seltsames

-(void)saveMessage:(id)sender 
{ 
    sqlite3 *database; 

    databaseName = @"BlogDatabase.sqlite"; 
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDir = [documentPaths objectAtIndex:0]; 
    databasePath = [documentsDir stringByAppendingPathComponent:databaseName]; 

    if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) 
     { 

      NSString *insertSQL = [NSString stringWithFormat:@"insert into \"main\".\"MessagesData\" (\"MessageText\", \"MessageDate\") values ('%@', '%@');", _textField.text, [[NSDate alloc] init]]; 
      NSLog(@"%@", insertSQL); 
      const char *insert_stmt = [insertSQL UTF8String]; 
      sqlite3_stmt *compiledStatement; 


      if(sqlite3_prepare_v2(database, insert_stmt, -1, &compiledStatement, NULL) != SQLITE_OK) 
       { 
        NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database)); 
        }else{ 
        if (sqlite3_step(compiledStatement) == SQLITE_DONE) 
         { 
          NSLog(@"All ok"); 
          } else { 
          NSLog(@"FAIL"); 
          } 
         } 
      sqlite3_finalize(compiledStatement); 
      } 
    sqlite3_close(database); 
    } 
+0

In welcher Datenbank Sie suchen. App db? –

Antwort

1

In welcher Datenbank suchen Sie? App db?

Können Sie die Anzahl der Datensätze überprüfen, nur die Datensätze zählen.

SELECT COUNT (*) FROM your_table_name

Ich bezweifle es, ob Sie einen beliebigen Wert in Ihrem _textField.text und Datum haben Sie die Initialisierung nur nicht sie zu setzen. und nehmen wir an, alles ist in Ordnung, dann

sollten Sie BlogDatabase.MessagesData nicht main.MessagesData verwenden.

versuchen Sie zuerst, das insertQuery auszuführen, das Sie NSLog in Ihrem Terminal plain. sqlite3 [app_db_path] /BlogDatabase.sqlite

+0

Datenbankname ist BlogDatabase.sql. Hat die Tabelle MessagesData. Dort habe ich schon 2 Datensätze und 'SELECT count (*) FROM your_table_name' zeigt mir diese Anzahl an. Der Text von '_text.Field.text'hat von der iPhone Tastatur (100% Wert existiert). Von NSLog habe ich "Einfügen in" main "." MessagesData "(" MessageText "," MessageDate ") Werte ('Einige neue Nachricht', '2012-04-01 17:11:13 +0000');' und ' Alles in Ordnung. – RomanHouse

+0

Dann sollten Sie ** BlogDatabase.MessagesData ** not main.MessagesData verwenden. Und versuchen Sie zuerst, das insertQuery auszuführen, das Sie NSLog in Ihr einfaches Terminal einfügen. sqlite3 BlogDatabase.sqlite –

+0

Geändert zu 'BlogDatabase.MessagesData'. In diesem Fall habe ich eine Fehlermeldung "Fehler beim Erstellen der Anweisung add" erhalten. 'keine solche Tabelle: BlogDatabase.MessagesData'''. Ältere Version funktioniert gut von Terminal. – RomanHouse

1

Sie müssen Ihren Code wie folgt ändern.

-(void)saveMessage:(id)sender 
{ 
sqlite3 *database; 

databaseName = @"BlogDatabase.sqlite"; 
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDir = [documentPaths objectAtIndex:0]; 
databasePath = [documentsDir stringByAppendingPathComponent:databaseName]; 


    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    BOOL success = [fileManager fileExistsAtPath:file]; 

    if(!success) { 
     databasePath = [[NSBundle mainBundle] pathForResource:databaseName ofType:nil]; 
    } 

setzen auch NSLog (@, sqlite3_errmsg (Datenbank) "Fehler '% s'."); nach jeder abgeschlossenen Datenbankoperation. (dh; nach, sqlite3_step, sqlite3_prepare usw.). Dies wird die genaue Fehlermeldung während der Verwendung der Datenbank ausgeben.

+0

Modifizierte meinen Code und legte NSLogs.Alle Änderungen, alle datenbezogenen Operationen funktionieren gut. – RomanHouse

Verwandte Themen