1

iOS アプリで SQLite クエリをデバッグする簡単な方法を探しています。私はこのようなものを持っています:

NSString *sql = [NSString stringWithString: @"SELECT * FROM table WHERE foo = ? AND bar = ?"]; 
NSArray *params = [NSArray arrayWithObjects: @"baz", @"bat", nil];
NSLog(@"%@ %@", sql, params);

出力を読みやすくするために、疑問符をパラメーターに置き換える1行または2行の行があるかどうかを知りたいです。有効な sql を出力するものを探しているのではなく、現在の NSLog よりも読みやすいものを探しています

4

1 に答える 1

1
@interface NSString (SQLQueryDebugging)
- (NSString *)stringBySubstitutingParameters:(NSArray *)params forInstancesOfPlaceholder:(NSString *)placeholder;
@end

@implementation NSString (SQLQueryDebugging)

- (NSString *)stringBySubstitutingParameters:(NSArray *)params forInstancesOfPlaceholder:(NSString *)placeholder
{
    NSString *composedQuery = self;
    NSRange substitutionRange = [composedQuery rangeOfString:placeholder];
    NSInteger parameterIndex = 0;
    while(substitutionRange.length != 0)
    {
        NSString *currentParam = [params objectAtIndex:parameterIndex];
        composedQuery = [composedQuery stringByReplacingCharactersInRange:substitutionRange withString:currentParam];
        ++parameterIndex;
        NSInteger lastSubstitutionIndex = substitutionRange.location + [currentParam length];
        NSRange searchRange = NSMakeRange(lastSubstitutionIndex, [composedQuery length] - lastSubstitutionIndex);
        substitutionRange = [composedQuery rangeOfString:placeholder options:0 range:searchRange];
    }

    return composedQuery;
}

それをどこかにドロップすると、必要なものを取得できます。

NSString *completeSQL = [sql stringBySubstitutingParameters:params forInstancesOfPlaceholder:@"?"];
于 2012-07-23T17:18:12.100 に答える