Переменная NSInteger в запросе SQLite - PullRequest
0 голосов
/ 30 сентября 2011

Может ли кто-нибудь помочь мне с запросом SQLite в моем приложении для iOS? Я хочу сделать запрос, который будет зависеть от NSInteger varialbe в предложении WHERE, но я не знаю, как добавить переменную в запрос.

Я пробовал что-то вроде этого:

MySqlite *sqlConnect = [[MySqlite alloc] init];  
sqlite3_stmt *statement = [sqlConnect makeSQL:"select * from table where id = %i", myIntegerVariable - 1];

Но, конечно, это не работает.

Спасибо.

EDIT

MySqlite.h

#import <Foundation/Foundation.h>  
#import <sqlite3.h>  

@interface MySqlite : NSObject {  

}  
- (sqlite3_stmt *)makeSQL:(char *)sql;  

@end

MySqlite.m

#import "MySqlite.h"  

@implementation MySqlite  

NSString *dbFileName = @"data.sqlite";  

- (void)createEditableCopyOfDatabaseIfNeeded {  

NSFileManager *fileManager = [NSFileManager defaultManager];  
NSError *error;  

NSString *writableDBPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]  
                            stringByAppendingPathComponent:dbFileName];  

if ([fileManager fileExistsAtPath:writableDBPath]){  
    return;  
}  

NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:dbFileName];  

if (! [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error] ) {  
    NSLog(@"Fail edit db");  
}  
}  

- (sqlite3 *) getDBConnection{  

[self createEditableCopyOfDatabaseIfNeeded];  

sqlite3 *DBConnection;  

NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]   
                  stringByAppendingPathComponent:dbFileName];  

if( sqlite3_open([path UTF8String], &DBConnection) != SQLITE_OK) {  
    NSLog(@"Fail open db");  
    return FALSE;  
}  

return DBConnection;  
}  

- (sqlite3_stmt *)makeSQL:(char *)sql{  
NSLog(@"Executing query: %s", sql);  

sqlite3_stmt *statement = nil;  

sqlite3 *db = [self getDBConnection];  

if ( db ) {  
    if (sqlite3_prepare_v2(db, sql, -1, &statement, NULL) != SQLITE_OK) {  
        NSLog(@"Error at query: %s", sqlite3_errmsg(db));  
    }  
}  
else {  
    NSLog(@"Error connect to db");  
}  

return statement;  
}  


@end  

1 Ответ

1 голос
/ 30 сентября 2011

Если я вас правильно понял, вы хотите вставить целочисленную переменную в SQL-запрос. Если так, то что-то вроде ниже должно сделать работу:

MySqlite *sqlConnect = [[MySqlite alloc] init];  
sqlite3_stmt *statement = [sqlConnect makeSQL:[[NSString stringWithFormat:@"select * from table where id = %d", myIntegerVariable - 1] UTF8String]];

%d - модификатор целого числа. Это предполагает, что селектор makeSQL принимает строку SQL NSString

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...