前回は、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の導入をご検討してみてください!
最後までご覧いただき有難うございました。
弊社では全国各地の請負い(ご自宅)で作業協力頂ける、フリーランスエンジニアの方を常時探しております。
ご興味ある方は、お気軽にお問い合わせ下さい。