.16 2009

SQLite を使ってみる(4)

Tasaki です。

今回は、前回掲載したコード内に登場した Person クラスの実装を見ていくことにします。

まず、ヘッダファイルの記述ですが、エンティティの各属性に対応する変数とプロパティを宣言します。加えて、前回登場したイニシャライザとデータベースから削除するためのメソッドを定義します。

#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 ));
 }
}


とりあえず、どんなエンティティでもこの2つのメソッドは最低限必要になると思います。
アプリにデータ修正機能を付加する場合には、更新用のメソッドが別途必要になります。

前回のエントリと合わせてご覧になればお分かりだと思いますが、SQLite API を用いた処理の流れは、どのような場合でもほとんど変わりません。prepare→step→finalize とエラー対処が基本です。このため大した処理でなくとも、コード量がそれなりに大きくなってしまいます。
SQLite を使えば使うほど、Core Data の偉大さを思い知らされそうです。


関連記事
スポンサーサイト



Comment

Post comment

  • comment
  • secret
  • 管理者にだけ表示を許可する

Trackback

trackbackURL:http://appteam.blog114.fc2.com/tb.php/78-deeb68ef

ブログ内検索

関連リンク

製品情報

最新記事

カテゴリ

プロフィール

neoxneo



NEXT-SYSTEM iOS Developers Blog


  • UTO:
    カナダ版iPhone4Sは、マナーモードでシャッター音がならない…


  • Ehara:
    ...


  • Hayate:
    ...


  • Tasaki:
    Developer登録完了...したのはいいけど


  • Ueda:
    ...



リンク