1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
| //
// Database.m
#import "Database.h"
// Static Statement
static sqlite3_stmt* statement = nil;
@implementation Database
- (id) init {
self = [super init];
if (self != nil) {
is_opened = NO;
[self open];
}
return self;
}
- (void) dealloc {
[self close];
[super dealloc];
}
#pragma mark - Close & Open Database
- (void) close {
if (sqlite3_close(database) == SQLITE_OK) {
DLOG( (@"Database::close: No problem") );
database = nil;
} else {
DLOG( (@"Database::close: Error: %s", sqlite3_errmsg(database)) );
// Force
sqlite3_finalize(statement);
statement = nil;
if (sqlite3_close(database) == SQLITE_OK) {
DLOG( (@"Database::close (Second try): No problem") );
database = nil;
} else {
DLOG( (@"Database::close (Second try): Error: %s", sqlite3_errmsg(database)) );
}
}
is_opened = NO;
}
- (void) open {
// if (is_opened)
// return;
is_opened = YES;
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentDirectory = [paths objectAtIndex:0];
NSString* path = [documentDirectory stringByAppendingPathComponent:@"database.sqlite"];
if (sqlite3_open([path UTF8String], &database) == SQLITE_OK) {
DLOG( (@"Database::open: No problem") );
} else {
DLOG( (@"Database::open: Error: %s", sqlite3_errmsg(database)) );
}
}
#pragma mark - Example Request
- (void) clean_user_datas {
NSString* request = nil;
SET_STRING(request, @"UPDATE User_Informations SET screenshot=?, message_screenshot=?, message=?, url=?, latitude=?, longitude=?, heading=?, pitch=? WHERE id=1")
if (sqlite3_prepare_v2(database, [request UTF8String], -1, &statement, NULL) == SQLITE_OK) {
char c = '\0';
sqlite3_bind_blob(statement, 1, &c, 1, SQLITE_STATIC);
sqlite3_bind_blob(statement, 2, &c, 1, SQLITE_STATIC);
sqlite3_bind_text(statement, 3, &c, 1, SQLITE_STATIC);
sqlite3_bind_text(statement, 4, &c, 1, SQLITE_STATIC);
sqlite3_bind_double(statement, 5, 0.0f);
sqlite3_bind_double(statement, 6, 0.0f);
sqlite3_bind_double(statement, 7, 0.0f);
sqlite3_bind_double(statement, 8, 0.0f);
if (sqlite3_step(statement) != SQLITE_DONE) {
DLOG( (@"Database::clean_database - error %s", sqlite3_errmsg(database)) );
} else {
DLOG( (@"Database::clean_database - ok") );
}
} else {
DLOG( (@"Database::clean_database - error %s", sqlite3_errmsg(database)) );
}
sqlite3_finalize(statement);
statement = nil;
}
@end |
Partager