Может ли кто-нибудь помочь мне с запросом 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