2014-02-18 4 views
1

У меня есть приложение iOS, использующее функцию локальной базы данных. Я не использую CoreData; Я копирую свой файл sqlite из набора ресурсов в папку «Документы», а затем обновляю/извлекаю данные из этого файла. Все обновления, создавая таблицу, вставляя алгоритм, отлично работают в моем приложении.Избегайте жесткого кодирования при обновлении локальной базы данных в ios

Я просто интересуюсь улучшением. У меня более 7 таблиц, и каждая таблица имеет разные атрибуты. Сейчас я должен указать каждый оператор обновления в моем коде, как (только в качестве примера):

// for table A 
    const char* sql = "update tableA Set attA1 = ?, attA2 = ? where att0 = ?"; 

    // .. other code here ... 

    // bind it - this is the part where i am confused. 
    // each table has different attribute.. So each table will have each binding snippet? 
    if(sqlite3_prepare_v2(database, sql, 267, &stmt, NULL)==SQLITE_OK){ 
     sqlite3_bind_text(stmt, 1, [input1 UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(stmt, 2, [input2 UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_int(stmt, 3, input0); 
    } 

Извинения, если это звучит как начинающий вопрос. Можно ли избежать «жесткого кодирования», как это? Я не нашел способ избежать жесткого кодирования, но мне просто интересно, есть ли у кого-то идеи. Ближайшее сообщение, которое я нашел, это this - и все было в порядке. Я просмотрел много учебников по iOS sqlite db, и большинство из них сделали это, так как у них только 1 таблица в их примере.

Я все еще учился, поэтому, пожалуйста, не слишком грубый на меня, если это очевидный/плохой вопрос. :)

+0

Вы можете использовать что-то вроде FMDB, или вы можете динамически создавать свои собственные SQL-инструкции. Это требует некоторого планирования и достаточного количества кодирования для создания «рамки», но это часто стоит того. –

ответ

0

Возможно, вы удалите шаблонный код с помощью вспомогательной библиотеки, которая использует концепции Objective C вместо raw C; в случае SQLite, что-то вроде FMDB.

Когда вы обнаружите, что вы повторяете один и тот же код, вы должны разложить общий код на вспомогательную функцию (/ class/etc.); то можно назвать так:

update_table_record(database, @"tableA", 
        @{ @"att0" : input0 }, // record ID 
        @{ @"attA1" : input1, // new values 
         @"attA2" : input2 }); 

Если записи таблицы соответствуют объектам в вашей программе, вы можете рассмотреть возможность использования ОРМ, например, chibi-ORM или sqlitepersistentobjects.

Смежные вопросы