0

sqlite3_prepare_v2 が false に等しい理由がわかりません。私はオンラインで検索しましたが、あまり見つけることができず、見つけたものは役に立ちませんでした. あるサイトは sqlite3_errmsg(database) の使用を提案しましたが、これは何らかの理由で「エラーではありません」と出力されました。オンラインの別の回答では、文字列の16進数で名前が付けられたiPhoneシミュレーターのフォルダーを削除することが提案されましたが、それも機能しませんでした。データベースを作成し、サポート ファイル フォルダーにドロップしたので、そこにあり、レコードが含まれています。

これは私のコードです:

-(void)readMovesFromDatabaseWithPath:(NSString *)filePath
{
    sqlite3 *database;

    printf("Here in readMovesFromDatabaseWithPath\n");

    if(sqlite3_open([filePath UTF8String], &database) == SQLITE_OK)
    {
        NSLog(@"Now in readMovesFromDatabaseWithPath\n");

        const char *sqlStatement = "select * from moves";
        sqlite3_stmt *compiledStatment;

        printf( "could not prepare statemnt: %s\n", sqlite3_errmsg(database) ); //returns "not an error"

        if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatment, NULL) == SQLITE_OK)
        {
            NSLog(@"In sqlite3_prepare_v2 block\n"); //does not reach this line

            while(sqlite3_step(compiledStatment) == SQLITE_ROW) //Loops through the database
            {
                //Extracts the move's name
                NSString *moveName = [NSString stringWithUTF8String:(char *) sqlite3_column_text(compiledStatment, 1)];

                //Extracts the move's description
                NSString *moveDescription = [NSString stringWithUTF8String:(char *) sqlite3_column_text(compiledStatment, 2)];

                //Creates new move objects
                Moves *newMove = [[Moves alloc] init];
                newMove.moveName = moveName;
                newMove.moveDescription = moveDescription;
                [self.moves addObject:newMove];
            }
        }

        sqlite3_finalize(compiledStatment);
    }
    sqlite3_close(database);
}
4

2 に答える 2

0

エラーを出力するステートメントをelse句に移動してみてください。あなたのプログラムはそれが失敗している理由を教えてくれます:

    if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatment, NULL) == SQLITE_OK)
    {
       /* your code here */
    }
    else
    {
        printf( "could not prepare statemnt: %s\n", sqlite3_errmsg(database) );
    } 

最も可能性の高いケースは、テーブルmovesが存在しないことです。

于 2012-08-03T02:45:30.297 に答える
0

あなたのsqlStatementをあなたのcompiledStatementに割り当てません。

const char *compiledStatment = [sqlStatement UTF8String];
于 2012-12-25T08:56:24.577 に答える