2010-12-13 7 views
0

Ich versuche, Ergebnisse aus einer SQlite-Tabelle abzurufen und sie dann den Variablen in Objective-C zuzuordnen. Meine Methode, die das sieht, sieht so aus:Wie kann man Ergebnisse aus einer SQLite-Tabelle abrufen und sie Variablen in Objective-C zuweisen?

- (void) readRestaurantsFromDatabase { 

//Setup the database object 
sqlite3 *database; 

//Init the restaurant array 
restaurants = [[NSMutableArray alloc] init]; 

//Open the database from the users filesystem 
if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) { 

    //setup the SQL statement and compile it for faster access 
    const char *sqlStatement = "select * from restaurant"; 
    sqlite3_stmt *compiledStatement; 

    if (sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) { 

     //loop through the results and add them to the feeds array 
     while (sqlite3_step(compiledStatement) == SQLITE_ROW) { 

      //read the data from the result row 
      NSString *aName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)]; 
      NSString *aAddress = [NSString stringWithUTF8String:(char *)sqlite_coluumn_text(compiledStatement, 2)]; 
      NSString *aCity = [NSString stringWithUTF8String:(char *)sqlite_coluumn_text(compiledStatement, 3)]; 
      NSString *aProvinceState = [NSString stringWithUTF8String:(char *)sqlite_coluumn_text(compiledStatement, 4)]; 
      NSString *aPostalZipCode = [NSString stringWithUTF8String:(char *)sqlite_coluumn_text(compiledStatement, 5)]; 
      NSString *aCountry = [NSString stringWithUTF8String:(char *)sqlite_coluumn_text(compiledStatement, 6)]; 
      NSString *aPhoneNumber = [NSString stringWithUTF8String:(char *)sqlite_coluumn_text(compiledStatement, 7)]; 
      NSString *aHours = [NSString stringWithUTF8String:(char *)sqlite_coluumn_text(compiledStatement, 8)]; 
      //double aLat 
      //double aLon 

      Restaurant *restaurant = [[Restaurant alloc] initWithName:aName address:aAddress city:aCity provinceState:aProvinceState postalZipCode:aPostalZipCode country:aCountry phoneNumber:aPhoneNumber hours:aHours latitude:aLat longitude:aLon]; 

      //add the restaurant object to the restaurant array 
      [restaurants addObject:restaurant]; 

      [restaurant release]; 

     } 


    } 

    sqlite3_finalize(compiledStatement); 

} 

sqlite3_close(database); 

} 

Ich habe kein Problem beim Abrufen von Zeichenfolgen aus der SQLite-Tabelle. Meine Verwirrung ist, wie man die Breiten- und Längengradvariablen von der SQLite Tabelle erhält, die als Doppeltes gespeichert werden? Wie würde ich diese Werte den Variablen double aLat und double aLon in meinem obigen Code zuweisen?

+0

Das ist eine höllisch lange 'init' Methode, die Sie dort bekommen haben, wie wäre es mit einem' NSDictionary'? –

+0

Verwenden Sie [FMDB] (http://github.com/ccgus/fmdb). –

Antwort

3

Verwenden Sie sqlite_column_double. So einfach ist das:

double aLon = sqlite_column_double(compiledStatement, 9); 
double aLat = sqlite_column_double(compiledStatement, 10); 
+0

Vielen Dank für Ihre schnelle Antwort! – syedfa

0

Easiest ich denken kann, ist eine NSNumber mit dem Schwimmer zu schaffen und den doppelten Wert immer aus ihm heraus:

NSNumber *number = [NSNumber numberWithFloat:aFloat]; 
double aDouble = [number doubleValue]; 
+0

Sie wissen, dass Sie 'aDouble = aFloat;'? – JeremyP

+0

wusste das nicht, danke! – Rog

+0

Vielen Dank, dass Sie sich die Zeit genommen haben, meine Frage zu beantworten! – syedfa

0

Wie Sie für andere Felder mussten. Sie können es abrufen und den doppelten Wert als Zeichenfolge angeben. Und ich schlage auch vor, dass Sie ein Wörterbuch erstellen. Sie können alle Ihre Daten im Wörterbuch speichern. Und danach können Sie in Ihrem Objective-C-Code darauf zugreifen.

+0

Vielen Dank, dass Sie sich die Zeit genommen haben, meine Frage zu beantworten! – syedfa

Verwandte Themen