【iPhoneアプリ】SQLiteでデータベースを使ってみる、FMDB、Litaなどを紹介


タイトル通りです。iPhoneアプリでデータベースを使う方法を紹介する感じです。
iOSではAndroidと同じようにSQLiteが使えるみたいですね。
今回はFMDBというライブラリを使って簡単にデータベースを作れる方法を紹介してみます。



SQLiteはサーバーにインストールとかそういうのは要らず、
たった1つのファイルがあればデータベースが使えてしまうという便利な奴です。


使用する時はアプリの中にファイルが作られます、アプリ専用のデータベースですね。
今回は実際にDBを作成、テーブルの作成、INSERTとSELECTまでやってみます。


FMDBをダウンロード、プロジェクトに追加する


まずはiOSでSQLiteを使いやすくしてくれるライブラリ「FMDB」をダウンロードしてきます。

GitHubで公開されているのでこちらからダウンロード。

https://github.com/ccgus/fmdb

ダウンロードしたZIPファイルを解凍。
中にある「src」フォルダの中にある以下のファイルをプロジェクトに追加します。

  • FMDatabase.h
  • FMDatabase.m
  • FMDatabaseAdditions.h
  • FMDatabaseAdditions.m
  • FMDatabasePool.h
  • FMDatabasePool.m
  • FMDatabaseQueue.h
  • FMDatabaseQueue.m
  • FMResultSet.h
  • FMResultSet.m
※fmdb.m以外全部です

たくさんあるので、FMDBというグループを作って中に入れました。

【iPhoneアプリ】SQLiteでデータベースを使ってみる、FMDB、Litaなどを紹介4



SQLiteを使用するためのライブラリ「libsqlite3.0.dylib」を追加


プロジェクトにSQLiteを使用するためのライブラリを追加します。
Build phasesを開き、 Link Binary With Libraries を選択。

+をクリックして、libSQLで検索、候補にでてきた「libsqlite3.0.dylib」を選択してAddを押して追加。

【iPhoneアプリ】SQLiteでデータベースを使ってみる、FMDB、Litaなどを紹介1

【iPhoneアプリ】SQLiteでデータベースを使ってみる、FMDB、Litaなどを紹介2

こんな感じ。
これでDBを扱うための設定は完了です。


データベースとテーブルを作成する


ここから先はソースコードを書いていきます。

使う箇所ではプロジェクトに追加したFMDBをimportします。
#import "FMDatabase.h"



(1) DBを作るパスとファイル名を取得します
(2) FMDBのクラスのインスタンスを作成します
(3) テーブル作成用のSQL文を用意します
(4) SQLを実行します

- (void)viewDidLoad
{
    [superviewDidLoad];
    //(1)
    NSArray  *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *dir   = [paths objectAtIndex:0];
    NSString *db_path  = [dir stringByAppendingPathComponent:@"test.db"];
    NSLog(@"%@", db_path );
    //(2)
    FMDatabase *db  = [FMDatabasedatabaseWithPath:db_path];
    //(3)
    NSString *sql = @"CREATE TABLE IF NOT EXISTS members (id INTEGER PRIMARY KEY , name TEXT ); ";
    
    [db open];
    //(4)
    [db executeUpdate:sql];
    
    [db close];
    
}





実行させると、アプリの中のDBが作成されます。
ログに実際に作られた場所が表示されるので、ちゃんと作成されているか調べてみます。
(実機の場合は、Organizerでアプリの中身をダウンロードすれば調べられます)

【iPhoneアプリ】SQLiteでデータベースを使ってみる、FMDB、Litaなどを紹介3

「test.db」というファイルが作成されています。
ちゃんとテーブルが作成されているか、SQLiteクライアントソフトを使って確認してみます。

「SQLite」データベースの管理ソフト「Lita」を使ってDBの中身を確認


Litaはフリーソフトなのでこちらからダウンロードできます。

http://www.dehats.com/drupal/?q=node/58
(AIRというFLASHの親戚みたいな仕組みで動いているので、動かすにはAIRのインストールが必須です。)

インストールが済んだら、実際にdbファイルを開いてみましょう。

テーブルが作られているのが確認できます。

【iPhoneアプリ】SQLiteでデータベースを使ってみる、FMDB、Litaなどを紹介6


INSERT文でレコードを追加


NSString型のINSERT文のSQLを作成して、
executeUpdateメソッドの引数に指定して実行します。

    /*
    中略
    */
    FMDatabase *db  = [FMDatabasedatabaseWithPath:@"データベースのパス"];
    
    NSString *insert_sql = @"INSERT INTO members (id,name) VALUES (?,?)";
    
    
    [db open];
    [db executeUpdate:insert_sql ,@"1",@"名前a"];
    [db executeUpdate:insert_sql ,@"2",@"名前b"];
    [db executeUpdate:insert_sql ,@"3",@"名前c"];
    [db close];





実行するとこんな風にレコードが作成されます。

【iPhoneアプリ】SQLiteでデータベースを使ってみる、FMDB、Litaなどを紹介5

SELECT文でレコードを抽出


先ほど作成したレコードを今度はSELECT文で抽出してみます。
NSString型のSELECT文のSQLを作成して、
executeQueryメソッドの引数に指定、戻り値をFMResultSet型で受け取ります。

FMResultSetクラスのnextメソッドで取得したデータの件数だけループ処理をします。

今回の例では、INTEGER型のidカラムをintForColumnメソッドで、
TEXT型のnameカラムをstringForColumnメソッドで取得しています。

    /*
    中略
    */
    FMDatabase *db  = [FMDatabasedatabaseWithPath:@"データベースのパス"];
    NSString *select_sql= @"SELECT id, name FROM members;";
    
    
    [db open];
    
    FMResultSet *result = [db executeQuery:select_sql];
    while ( [result next] ) {
        int      result_id   = [result intForColumn:@"id"];
        NSString *result_name = [result stringForColumn:@"name"];
        NSLog(@"recode id[%d] name [%@]", result_id , result_name);
    }
    
    
    [db close];
    







以上です。
アップデートとかも簡単に出来そうです




       |
       |
 : : :::::::,. -─´、て
::: :: :::Σco===、!,_
: : :: :::::l´i(ノリハノリ)  LitaとかAIRとかいう単語を観てると鍵っ子の血が騒ぎます…
 : : :::::ルlリ⊃⊂ヽ     次はテーブルに初期データを入れたものをコピーして使う方法を紹介してみたいです
 : : ::::(( //xxxxヽ、─────────────────
    /~~~
  ./


関連記事

コメントは受け付けていません。