2010-12-02 7 views
2

Ich habe eine SQLite db für iPhone erstellt, um meine Daten (Zeichenfolgen) zu speichern. Ich habe einige Daten, die 'einfache Anführungszeichen (d. H. Nicht angespannt sein). Dies wurde in die DB mit dem normalen Escape für SQLite eingefügt.Single Quote Encoding Problem beim Lesen von SQLite für iPhone

INSERT INTO todo(test) VALUES('don''t be tense');

Wenn ich auf die Daten im Terminal ein Auswahl tun kann ich das Apostroph in der Aufzeichnung sehen.

don't be tense

Mein Problem ist, wenn ich die Platte eingelesen, die Apostroph ist es nicht in der NSLog:

dont be tense

Das ist der Ruf auf dem Gebiet zu lesen:

self.text = [NSString stringWIthUTF8String:(char *)sqlite3_column_text(init_statement, 1)]; NSLog(@"%@",self.translation);

Ich würde sehr schätzen Hilfe, wie man das Angebot sichert gelesen wird, in

Unterhalb der vollständige Code ist, wenn es hilft.

static sqlite3_stmt *init_statement = nil; 

@implementation Todo 
@synthesize primaryKey,text; 

- (id)initWithPrimaryKey:(NSInteger)pk database:(sqlite3 *)db { 

    if (self = [super init]) { 
     primaryKey = pk; 
     database = db; 
     // Compile the query for retrieving book data. See insertNewBookIntoDatabase: for more detail. 
     if (init_statement == nil) { 
      // Note the '?' at the end of the query. This is a parameter which can be replaced by a bound variable. 
      // This is a great way to optimize because frequently used queries can be compiled once, then with each 
      // use new variable values can be bound to placeholders. 
      const char *sql = "SELECT text FROM todo WHERE pk=?"; 
      if (sqlite3_prepare_v2(database, sql, -1, &init_statement, NULL) != SQLITE_OK) { 
       NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database)); 
      } 
     } 
     // For this query, we bind the primary key to the first (and only) placeholder in the statement. 
     // Note that the parameters are numbered from 1, not from 0. 
     sqlite3_bind_int(init_statement, 1, primaryKey); 
     if (sqlite3_step(init_statement) == SQLITE_ROW) { 
      self.text = [NSString stringWithUTF8String:(char *)sqlite3_column_text(init_statement, 0)]; 
      NSLog(@"%@",self.text); 
     } else { 
      self.text = @"Nothing"; 
     } 
     // Reset the statement for future reuse. 
     sqlite3_reset(init_statement); 
    } 
    return self; 
} 
+0

Gut zu bearbeiten, macht die Frage jetzt viel mehr Sinn. Ich war wirklich verwirrt von der ehemaligen "Ich kann das einfache Zitat in der Aufzeichnung zu sehen. Seien Sie nicht angespannt". :) –

+0

Können Sie ein SQLite3-Skript zur Verfügung stellen, um Ihre Datenbank zu erstellen und den Eintrag zu testen? Ihr Code funktionierte gut für mich mit meiner Testdatenbank, die ich so erstellt habe: 'sqlite3 so_squot.db create table TODO (pk Ganzzahl Primärschlüssel asc, Text text not null); Einfügen in TODO-Werte (1, 'nicht gespannt sein'); .quit' –

+0

Hallo Jeremy, Danke, dass du es ausprobiert hast. – Brian

Antwort

0

ich es fest. Es scheint, dass ich bei der Aktualisierung der Datenbank die alte nicht aus dem Simulator löschte, so dass sie die ganze Zeit mit alten Daten testete. Dummer Fehler! Also gibt es kein Problem in einfachen Anführungszeichen von SQLite zu lesen (wahrscheinlich, warum ich nie Informationen darüber finden konnte). Danke an diejenigen, die lesen und versuchen zu helfen!