[Objective-C] データベースを使ってみよう!

前回は、cocos2d-xにて物理エンジンの使用方法についてご紹介しました。
今回は、iOSアプリケーションでデータベースを利用する方法についてご紹介します。

例えば、大規模なカードゲームのアプリケーションを開発する場合、膨大なデータをアプリケーション内で
管理する必要があるため、データベースを利用した方が開発がスムーズに進む場合があります。

そこで、アプリケーション内にで利用できるデータベースについてご紹介します。
「sqlite(※)」を使用してデータベースを取り扱ってみたいと思います。
※アプリケーション組込み用のリレーショナルデータベース管理システムです。
 Oracle及び、MySQLのようにサーバやクライアント構成ではなく、
 ファイルを直接読み書きするタイプであり、サーバを必要は必要ありません。

今回は、容易に「sqlite」のデータベースへアクセスし、操作することができる
オープンソースライブラリの「FMDB」を使用したいと思います。
それでは、早速データベースを扱うアプリケーションを作成してみましょう。

下記の操作を行うことができるアプリケーションを作成したいと思います。
・テーブルの作成
・データの追加
・データの取得
・データの更新
・データの削除

<iOSアプリケーションでデータベースを利用する方法>
【前提条件】
 ・Xcodeのサンプルプロジェクトを用意しておくこと
  ※画面内に下記のボタンを用意しておくこと
   ・テーブル作成
   ・データ追加
   ・データ取得
   ・データ更新
   ・データ削除

【手順1】
githubからオープンソースライブラリである「FMDB」をダウンロードし、任意の場所に保存します。

【手順2】
手順1でダウンロードした「FMDB」をプロジェクト内のディレクトリに格納します。
※「fmdb-master」-「src」ディレクトリ内にある「fmdb」フォルダが対象です

【手順3】
前提条件で用意したプロジェクトを開きます。

【手順4】
「sqlite」を使用するため、ライブラリを追加します。

【手順5】
「FMDB」のリンクを作成します。

【手順6】
「ViewController.m」ファイルにDBファイルの読込み処理を追加します。

#import "ViewController.h"
#import "FMDatabase.h"

@interface ViewController ()
@property (nonatomic, strong) FMDatabase *db;
@end

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    //DBファイルの格納パスを取得する
    NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *dbPathStr = [path objectAtIndex:0];
    NSString *dbPatch = [dbPathStr stringByAppendingPathComponent:@"sampleDB.sqlite"];
    
    //DBファイルを参照する
    //指定したファイルパスにDBファイルが存在しない場合は、ディレクトリ内にDBファイルを作成する
    self.db = [FMDatabase databaseWithPath:dbPatch];
}

【手順7】
「ViewController.m」ファイルに「テーブル作成ボタン」タップ時の処理を追加します。

//テーブル作成ボタンタップ処理
- (IBAction)createTableButton_Click:(id)sender
{
    if(nil != self.db)
    {
        //クエリを作成する
        NSString *sql = @"CREATE TABLE sampleTable(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, Age INTEGER);";
        
        //テーブルを開く
        [self.db open];
        
        //クエリを実行する
        [self.db executeUpdate:sql];
        
        //テーブルを閉じる
        //ファイルをcloseすることによって、編集内容が保存されます
        [self.db close];
    }
}

【手順8】
「ViewController.m」ファイルに「データ追加ボタン」タップ時の処理を追加します。

//データ追加ボタンタップ処理
- (IBAction)AddDataButton_Click:(id)sender
{
    if(nil != self.db)
    {
        //クエリを作成する
        NSString *sql = @"INSERT INTO sampleTable(name, age) VALUES (?,?)";
        
        //テーブルを開く
        [self.db open];
        
        //クエリを実行する
        [self.db executeUpdate:sql, @"アライト太郎", [NSNumber numberWithInteger:10]];

        //テーブルを閉じる
        //ファイルをcloseすることによって、編集内容が保存されます
        [self.db close];
    }
}

【手順9】
「ViewController.m」ファイルに「データ取得ボタン」タップ時の処理を追加します。

//データ取得ボタンタップ処理
- (IBAction)GetDataButton_Click:(id)sender
{
    if(nil != self.db)
    {
        //クエリを作成する
        NSString *sql = @"SELECT id, name, age FROM sampleTable;";
        
        //テーブルを開く
        [self.db open];
        
        //クエリを実行する
        FMResultSet *results = [self.db executeQuery:sql];
        
        //結果を出力する
        while ([results next]) {
            NSLog(@"%d %@ %d", [results intForColumn:@"id"], [results stringForColumn:@"name"], [results intForColumn:@"age"]);
        }
        
        //テーブルを閉じる
        [self.db close];
    }
}

【手順10】
「ViewController.m」ファイルに「データ更新ボタン」タップ時の処理を追加します。

//データ更新ボタンタップ処理
- (IBAction)UpdateDataButton_Click:(id)sender
{
    if(nil != self.db)
    {
        //クエリを作成する
        NSString *sql = @"UPDATE sampleTable SET name = ?, age = ? WHERE id = 1";
        
        //テーブルを開く
        [self.db open];
        
        //クエリを実行する
        [self.db executeUpdate:sql, @"アライト次郎", [NSNumber numberWithInteger:5]];
        
        //テーブルを閉じる
        //ファイルをcloseすることによって、編集内容が保存されます
        [self.db close];
    }
}

【手順11】
「ViewController.m」ファイルに「データ削除ボタン」タップ時の処理を追加します。

//データ削除ボタンタップ処理
- (IBAction)DeleteDataButton_Click:(id)sender
{
    if(nil != self.db)
    {
        //クエリを作成する
        NSString *sql = @"DELETE FROM sampleTable WHERE id = ?";

        //テーブルを開く
        [self.db open];
        
        //クエリを実行する
        [self.db executeUpdate:sql, [NSNumber numberWithInteger:1]];
        
        //テーブルを閉じる
        //ファイルをcloseすることによって、編集内容が保存されます
       [self.db close];
    }
}

お疲れ様でした。
これでデータベースを操作する処理を作成することができました。
それでは、実際にアプリケーションを実行してみましょう。

【手順1】
「テーブル作成」ボタンをクリックします。

sqliteファイルを開き、テーブルが作成されたことを確認します。

【手順2】
「データ追加」ボタンをクリックします。

sqliteファイルを開き、データが追加されたことを確認します。

【手順3】
「データ取得」ボタンをクリックします。

Xcodeをログを確認します。

【手順4】
「データ更新」ボタンをクリックします。

sqliteファイルを開き、データが更新されたことを確認します。

【手順5】
「データ削除」ボタンをクリックします。

sqliteファイルを開き、データが削除されたことを確認します

これで、「データベースを使ってみよう!」は完了となります。

sqliteを使用することでデータの管理を行う事が可能であり、アプリケーション内で容易に
データベースへアクセスでき、操作することが可能です。
まだ、トランザクション制御も行えるので、エラーなどで処理前の状態に戻したければ、
ロールバックすることも可能です。

大規模なデータを取り扱うアプリケーションを開発する場合は、ぜひsqliteの導入をご検討してみてください!
最後までご覧いただき有難うございました。


弊社では全国各地の請負い(ご自宅)で作業協力頂ける、フリーランスエンジニアの方を常時探しております。
ご興味ある方は、お気軽にお問い合わせ下さい。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*