복붙노트

[SQL] SQLite는 데이터베이스로드 실패 - sqlite가 가진 문제는 명령문을 준비 - 아이폰 - 엑스 코드 4.3.1

SQL

SQLite는 데이터베이스로드 실패 - sqlite가 가진 문제는 명령문을 준비 - 아이폰 - 엑스 코드 4.3.1

나는 어떤로드합니다 SQLite 데이터베이스를 다음 코드에 문제가 있어요.

- (NSArray *)getDatabase {

NSLog(@"Get Database Called");

    NSMutableArray *retval = [[[NSMutableArray alloc] init] autorelease];
    NSString *query = @"SELECT Description, UniqueID, HexCoords, NoHexCoords, NoAnnots, AnnotText, DescriptionFormatting, HexCoordsPortrait FROM MainTable";
    sqlite3_stmt *statement;
    if (sqlite3_prepare_v2(_database, [query UTF8String], -1, &statement, nil) 
        == SQLITE_OK) {
        while (sqlite3_step(statement) == SQLITE_ROW) {

            char *nameChars = (char *) sqlite3_column_text(statement, 0);
            char *desChars = (char *) sqlite3_column_text(statement, 1);
            int uniqueID = sqlite3_column_int(statement, 2);

중단 점을 사용에서 나는 문제가있는 경우 문 및 문 경우 코드는 결코이 과거 얻을 수 없다는 것을 알 수 있습니다. 잘못 될 일을 캔 사람의 자리? 코드는 몇 달 전에 작업을하고 있었고, 난 최근 때문에이 문제가 될 수있는 엑스 코드 4.3로 업그레이드?

미리 감사드립니다.

해결법

  1. ==============================

    1.그래, 난 요아킴에 동의합니다. 때로는 DB가 doesnot 정말 연결에 문제가있다. 내가 뭘하는 몇 가지입니다. 먼저 내 응용 프로그램 응용 프로그램 위임에 코드를 다음 추가합니다.

    그래, 난 요아킴에 동의합니다. 때로는 DB가 doesnot 정말 연결에 문제가있다. 내가 뭘하는 몇 가지입니다. 먼저 내 응용 프로그램 응용 프로그램 위임에 코드를 다음 추가합니다.

    - (void) copyDatabaseIfNeeded {
    
        //Using NSFileManager we can perform many file system operations.
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSError *error;
        NSString *dbPath = [self getDBPath];
        BOOL success = [fileManager fileExistsAtPath:dbPath]; 
    
        if(success) {
    
            NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"MyDB.sqlite"];
            success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];
    
            if (!success) 
                NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
        }   
    }
    

    아래 applicationDidFinishLaunching에서이 함수를 호출합니다.

    지금 현재 UR 번들에있는 데이터베이스를 제거합니다. (확인 U는 IT의 BACKUP 있었다). 그리고 (가능한 삭제 모든 아이폰 시뮬레이터 폴더에서 프로젝트의 경우) 사촌 때로는 이전 데이터베이스가 연결되어 있습니다. UR 번들에 데이터베이스를 추가, 귀하의 프로젝트를 청소합니다. 컴파일 ..

    이 일을 알려줘

    가져 오기 경로 기능

    - (NSString *) getDBPath {
            //Search for standard documents using NSSearchPathForDirectoriesInDomains
            //First Param = Searching the documents directory
            //Second Param = Searching the Users directory and not the System
            //Expand any tildes and identify home directories.
            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
            NSString *documentsDir = [paths objectAtIndex:0];
            return [documentsDir stringByAppendingPathComponent:@"MYDB.sqlite"];
    }
    
  2. from https://stackoverflow.com/questions/9887785/sqlite-database-load-fails-issue-with-sqlite-prepare-statement-iphone-xcod by cc-by-sa and MIT license