Создание файла базы данных SQLite3 с помощью Objective-C

Я пытаюсь создать файл базы данных SQLite3 с помощью Objective-C во время выполнения. Я пытаюсь создать таблицу под названием «tblStore». Я хочу, чтобы имена полей назывались «strStoreNumber» и «strStoreReg». Я новичок в iOS и SQLite, поэтому мне трудно найти синтаксис для этого. В дополнение к созданию таблицы я хочу, чтобы созданная таблица находилась НЕ в комплекте приложений, а скорее находилась/хранилась где-то на телефоне. Таблица должна быть доступна для чтения/записи. Я кое-что прочитал о «песочнице пользователя», а также о «каталоге документов». Я не уверен, что понимаю разницу между ними.В идеале мое приложение должно использовать кнопку для ввода данных из текстовых полей. После того, как ввод из текстовых полей будет помещен в строки, будет выполнена проверка, существует ли моя таблица SQLite "tblStore", и если это не так, таблица будет создана.

Резюме: 1. Каков синтаксис Obj-C/SQLite для создания таблицы с именем «tblStore» с полями «strStoreNumber» и «strStoreReg»? 2. Где должен находиться файл базы данных? Мне нужно прочитать и записать в файл базы данных tblStore. 3. В чем разница между «песочницей пользователя» и «каталогом документов»?

Вот что у меня есть на данный момент:

-(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;   
} 

Когда я запускаю свое приложение, я получаю следующие ошибки:

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

Я ценю всех, кто находит время, чтобы объяснить некоторые из этих вещей, так как я очень новичок и не удалось выполнить некоторые из вещей, которые я пробовал. Большое спасибо за помощь!

6
задан Skizz 10 May 2012 в 19:16
поделиться