// 全ての位置情報をテーブルから削除
- ( void ) deleteAllData {
static char *sqlString = "DELETE FROM person";
sqlite3_stmt *statement = NULL;
if( database != NULL ) {
if( sqlite3_prepare_v2( database, sqlString, -1, &statement, NULL ) == SQLITE_OK ) {
while( sqlite3_step( statement ) == SQLITE_ROW );
}
sqlite3_finalize( statement );
}
}
- ( void ) closeDatabase {
if( database == NULL ) {
return;
}
if( sqlite3_close( database ) != SQLITE_OK ) {
NSLog( @"Failed to close database with '%s'.", sqlite3_errmsg( database ));
}
}
// Person オブジェクトの新規追加用メソッド
- ( id ) initWithID:( NSUInteger ) id name:( NSString *) name database:( sqlite3 *) db {
if( name == nil || db == NULL ) {
return nil;
}
if(( self = [ super init ]) != nil ) {
database = db;
static char *sqlString = "INSERT INTO person VALUES(?,?)";
sqlite3_stmt *statement = NULL;
if( sqlite3_prepare_v2( database, sqlString, -1, &statement, NULL ) == SQLITE_OK ) {
int i = 1;
sqlite3_bind_int( statement, i++, id );
sqlite3_bind_text( statement, i++, [ name UTF8String ], -1, SQLITE_TRANSIENT );
if( sqlite3_step( statement ) != SQLITE_ERROR ) {
self.id = id;
self.name = name;
[ name retain ];
} else {
// データベースへの登録に失敗
NSLog( @"Insertion Error : failed to step with '%s'.", sqlite3_errmsg( database ));
}
sqlite3_finalize( statement );
} else {
NSLog( @"Insertion Error : failed to prepare with '%s'.", sqlite3_errmsg( database ));
}
}
return self;
}
#import <UIKit/UIKit.h>
#import <sqlite3.h>
@interface Person : NSObject {
// エンティティの属性
NSUInteger id;
NSString *name;
// DB のポインタ
sqlite3 *database;
}
@property ( nonatomic, retain ) NSString *name;
@property ( nonatomic ) NSUInteger id;
- ( id ) initWithStatement:( sqlite3_stmt *) statement database:( sqlite3 *) db;
- ( void ) deleteFromDatabase;
@end
// ステートメントから初期化
- ( id ) initWithStatement:( sqlite3_stmt *) statement database:( sqlite3 *) db {
if(( self = [ super init ]) != nil ) {
database = db;
int i = 0;
id = sqlite3_column_int( statement, i++ );
name = [[[ NSString stringWithUTF8String: sqlite3_column_text( statement, i++ )] retain ];
}
return self;
}
// データベースから該当項目を抹消
- ( void ) deleteFromDatabase {
if( database == NULL ) {
return;
}
// 該当項目の削除用 SQL 文を作成
NSString *deleteSQL = [ NSString stringWithFormat: @"DELETE FROM location WHERE id=%d", id ];
// SQL文のコンパイルと実行
sqlite3_stmt *statement = NULL;
if( sqlite3_prepare_v2( database, [ deleteSQL UTF8String ], -1, &statement, NULL ) != SQLITE_OK ) {
NSLog( @"Failed to prepare statement with '%s'.", sqlite3_errmsg( database ));
}
int wasSucceeded = sqlite3_step( statement );
sqlite3_finalize( statement );
if( wasSucceeded != SQLITE_DONE ) {
NSLog( @"Failed to delete from database with '%s'.", sqlite3_errmsg( database ));
}
}