2014-02-18 2 views
1

로컬 데이터베이스 기능을 사용하는 iOS 응용 프로그램이 있습니다. CoreData를 사용하지 않습니다. 내 sqlite 파일을 리소스 번들에서 Documents 폴더로 복사 한 다음 해당 파일에서 데이터를 업데이트/풀합니다. 모든 업데이트, 테이블 만들기, 알고리즘 삽입 내 애플 리케이션에서 완벽하게 작동합니다.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

원시 C 대신 Objective C 개념을 사용하는 도우미 라이브러리를 사용하여 상용구 코드를 제거 할 수 있습니다. SQLite의 경우에는 FMDB과 같습니다.

동일한 코드를 반복적으로 작성하면 공통 코드를 도우미 함수 (/ class/etc.)에 포함시켜야합니다. 뭔가는 다음과 같이 호출 할 수 : 테이블 레코드를 프로그램의 객체에 해당하는 경우

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

, 당신은 같은 chibi-ORM 또는 sqlitepersistentobjects을 ORM을 사용하는 것이 좋습니다.

관련 문제