Erstellen einer SQLite3-Datenbankdatei mit Objective-C

Ich versuche, eine SQLite3-Datenbankdatei über Objective-C zur Laufzeit zu erstellen. Ich versuche, eine Tabelle mit dem Namen "tblStore" zu erstellen. Ich möchte, dass die Feldnamen "strStoreNumber" und "strStoreReg" heißen. Ich bin neu in iOS und SQLite, daher fällt es mir schwer, die Syntax dafür zu finden. Zusätzlich zum Erstellen der Tabelle möchte ich, dass sich die erstellte Tabelle NICHT im App-Bundle befindet, sondern irgendwo auf dem Telefon gespeichert wird. Die Tabelle muss lesbar / beschreibbar sein. Ich habe etwas über "Benutzersandbox" und auch ein "Dokumentenverzeichnis" gelesen. Ich bin mir nicht sicher, ob ich den Unterschied zwischen den beiden verstehe. Im Idealfall würde meine App eine Schaltfläche verwenden, um Eingaben aus Textfeldern zu übernehmen. Nachdem die Eingabe aus den Textfeldern in Zeichenfolgen eingegeben wurde, wird geprüft, ob die SQLite-Tabelle "tblStore" vorhanden ist. Wenn dies nicht der Fall ist, wird die Tabelle erstellt.

So rekapitulieren Sie: 1. Wie lautet die Syntax für Obj-C / SQLite, um eine Tabelle mit dem Namen "tblStore" mit den Feldern "strStoreNumber" und "strStoreReg" zu erstellen? 2. Wo soll sich die DB-Datei befinden? Ich muss von der tblStore-Datenbankdatei lesen und in sie schreiben. 3. Was ist der Unterschied zwischen einer "Benutzersandbox" und einem "Dokumentenverzeichnis"?

Das habe ich aktuell:

<code>-(IBAction)setInput:(id)sender
{
    NSString *strStoreNumber;
    NSString *strRegNumber;
    NSString *tableName = @"tblStore";
    NSString *dbStrStore = @"strStore";
    NSString *dbStrReg = @"strReg";


    strStoreNumber = StoreNumber.text;
    strRegNumber = RegNumber.text;

    NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString* documentsDirectory = [paths lastObject];
    NSString* databasePath = [documentsDirectory stringByAppendingPathComponent:@"tblStore.sqlite"];
//  NSString* databasePath = [[NSBundle mainBundle] pathForResource:@"tblStore" ofType:@"sqlite"];

    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) 
    {
        NSLog(@"Opened sqlite database at %@", databasePath);

        char *err; 
        NSString *sql = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS '%@' ('%@' TEXT PRIMARY KEY, '%@' TEXT);", tableName, dbStrStore, dbStrReg];
        if (sqlite3_exec(database, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) 
        { 
            sqlite3_close(database);
            NSAssert(0, @"Table failed to create.");
        }
        //...stuff
    } 
    else 
    {
        NSLog(@"Failed to open database at %@ with error %s", databasePath, sqlite3_errmsg(database));
        sqlite3_close (database);
    }

    NSString *querystring;

    // create your statement
    querystring = [NSString stringWithFormat:@"SELECT strStore, strReg FROM tblStore WHERE strStore = %@ AND strReg = %@;", strStoreNumber, strRegNumber];  

    const char *sql = [querystring UTF8String];

    NSString *szStore = nil;
    NSString *szReg = nil;

    sqlite3_stmt *statement = nil;
    if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL)!=SQLITE_OK) //queryString = Statement
    {
        NSLog(@"sql problem occured with: %s", sql);
        NSLog(@"%s", sqlite3_errmsg(database));
    }
    else
    {
        // you could handle multiple rows here
        while (sqlite3_step(statement) == SQLITE_ROW) 
        {            
            szStore = [NSString stringWithUTF8String:(char*)sqlite3_column_text(statement, 0)];
            szReg = [NSString stringWithUTF8String:(char*)sqlite3_column_text(statement, 1)];
        }        
    }

    sqlite3_finalize(statement);

    lblStoreNumber.text = szStore;
    lblRegNumber.text = szReg;   
} 
</code>

Wenn ich meine App ausführe, erhalte ich die folgenden Fehlermeldungen:

<code>2012-05-10 14:58:38.169 CCoDBTry[355:f803] Opened sqlite database at /Users/Matt****/Library/Application Support/iPhone Simulator/5.1/Applications/5DB7A218-A0F6-   485F-B366-91FD2F9BC062/Documents/tblStore.sqlite
2012-05-10 14:58:38.307 CCoDBTry[355:f803] sql problem occured with: SELECT strStore, strReg FROM tblStore WHERE strStore = 8053 AND strReg = 4;
2012-05-10 14:58:38.308 CCoDBTry[355:f803] no such column: strStore
</code>

Ich schätze jeden, der sich die Zeit nimmt, einige dieser Dinge zu erklären, da ich sehr neu bin und einige der Dinge, die ich ausprobiert habe, nicht erfolgreich ausgeführt habe. Vielen Dank für die Hilfe!

Antworten auf die Frage(6)

Ihre Antwort auf die Frage