0

私は次のコードを持っています(このチュートリアルから変更されたコード):

    -(NSMutableArray *) getChampionDatabase
{
    NSMutableArray *championsArray = [[NSMutableArray alloc] init];

    @try {

    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *databasePath = [[NSBundle mainBundle]pathForResource: @"Champions Database" ofType:@"sqlite"];
    BOOL success = [fileManager fileExistsAtPath:databasePath];

    if (!success)
    {
        NSLog(@"cannot connect to Database! at filepath %@",databasePath);
    }

    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
    {
    const char *sql = "SELECT CHAMPION_ID,CHAMPION_NAME,CHAMPION_IMG FROM CHAMPIONS";
    sqlite3_stmt *sqlStatement;

    if(sqlite3_prepare(database, sql, -1, &sqlStatement, NULL) == SQLITE_OK)
    {
        while (sqlite3_step(sqlStatement)==SQLITE_ROW) {
            championList *ChampionList = [[championList alloc]init];
            ChampionList.championId = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,0)];
            ChampionList.championName = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,1)];
            ChampionList.championImage = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 2)];
            [championsArray addObject:ChampionList];
    }
    }
        else
        {
            NSLog(@"problem with database prepare");
        }
    }
        else
        {
            NSLog(@"problem with database openning");
        }
    }

@catch (NSException *exception)
    {
    NSLog(@"An exception occured: %@", [exception reason]);
    }
@finally
    {
    return championsArray;
    }
}

このコードを実行した後、私は常に出力を持っています:「データベースの準備に関する問題」

次に、次のコードでsqlite3_prepareのエラー番号を確認しようとしました。

int ret = sqlite3_prepare(database, sql, -1, &sqlStatement, NULL);
            if (ret != SQLITE_OK) {
                NSLog(@"Error calling sqlite3_prepare: %d", ret);
            }

出力: "sqlite3_prepareの呼び出しエラー:26"

エラー26 -/*データベースファイルではないファイルが開かれました*/


ファイルにはsqlite3バージョンがあります

これはどのように可能ですか?ファイル拡張子は.sqliteで、sqliteマネージャーで変更できます

4

1 に答える 1

2

プロジェクトのにDBを追加し、DBressource bundleの名前にスペースを入れないようにしてください。たとえば、のような名前を使用しますchampion_db.sqlite

于 2012-09-23T22:19:36.013 に答える