SQLite3を直接使うには、フレームワーク「libsqlite3.bylib」の追加が必要。
Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk/usr/lib/
フレームワークを追加したら.hにsqlite3をimportしておく。
#import "/usr/include/sqlite3.h"
.mに実装する。 ■データベース作成
if (sqlite3_open([[self dataFilePath] UTF8String], &database) != SQLITE_OK) {
sqlite3_close(database);
NSAssert(0, @"Faild to open database");
}
char *errorMsg;
NSString *createSQL = @"CREATE TABLE IF NOT EXISTS FIELDS (row INTEGER PRIMARY KEY, field_data TEXT);";
if (sqlite3_exec(database, [createSQL UTF8String], NULL, NULL, &errorMsg)) {
sqlite3_close(database);
NSAssert(0, @"Error creating table: %s", errorMsg);
}
NSString *query = @"SELECT row, field_data FROM FIELDS ORDER BY row";
sqlite3_stmt *stmt;
if (sqlite3_prepare_v2(database, [query UTF8String], -1, &stmt, NULL) == SQLITE_OK) {
while (sqlite3_step(stmt) == SQLITE_ROW) {
int row = sqlite3_column_int(stmt, 0);
char *rowData = (char *)sqlite3_column_text(stmt, 1);
NSString *fieldName = [[NSString alloc]
initWithFormat:@"field%d", row];
NSString *fieldValue = [[NSString alloc] initWithUTF8String:rowData];
UITextField *field = [self valueForKey:fieldName];
field.text = fieldValue;
[fieldName release];
[fieldValue release];
}
sqlite3_finalize(stmt);
}
■データ挿入/更新
-(void)applicationWillTerminate:(NSNotification *)notification {
for (int i = 1; i <= 4; i++) {
NSString *fileName = [[NSString alloc]
initWithFormat:@"field%d", i];
UITextField *field = [self valueForKey:fileName];
[fileName release];
char *errorMsg;
char *update = "INSERT OR REPLACE INTO FIELDS (ROW, FIELD_DATA) VALUES(?, ?);";
sqlite3_stmt *stmt;
if (sqlite3_prepare(database, update, -1, &stmt, nil) == SQLITE_OK) {
sqlite3_bind_int(stmt, 1, i);
sqlite3_bind_text(stmt, 2, [field.text UTF8String], -1, NULL);
}
if (sqlite3_step(stmt) != SQLITE_DONE) {
NSAssert1(0, @"Error updating table: %s", errorMsg);
sqlite3_close(database);
}
}
}
SQLite3で利用できるメソッドやプロパティー等は、sqlite3.hを参考にすればよい。 基本的にデータベース作成、SQL実行なので、SQLがわかればそんな難しいことはないと思う。 ※sqlite3に関わる構文上で、option + クリック
ソース