のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

iPhoneApplication FMDBの使い方

Sponsored Links

皆さんこんにちわ
お元気ですか?私は元気です。

最近失速気味で申し訳ない。記事に書きたいこと、勉強していることは増えているのですが、どうしても時間が取れず;;

さて、本日はFMDBの使い方について
sqliteと呼ばれるDBのアプリケーションが存在するのですが、それをiPhoneの開発時に簡単に使えるライブラリです。

ちなみに私のXcodeのVersionは5(5.2)です。

外部からライブラリを入れるので色々使う時にはライセンスなどの注意が必要です。

FMDB

導入方法

ライブラリを導入

ダウンロードしたFMDBを解凍後、ライブラリを導入する
解凍したフォルダの中にあるsrcを開く、

f:id:tereka:20140415100843p:plain

プロジェクトはこのような感じです。
f:id:tereka:20140415100300p:plain

この中からfmdb.m以外をプロジェクトへドラッグアンドドロップ

f:id:tereka:20140415101023p:plain

Finishを押す。

最後にXcodesqliteのライブラリを導入する

f:id:tereka:20140415101140p:plain

この部分のLinked Frameworks and Librariesの+を押し、libsqlite3.0.dylibを選択しaddを押す。

使用法

データベースの作成・読み込み
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //Documentフォルダの検索
    NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES );
    NSString *dir   = [paths objectAtIndex:0];
    //file.dbのDBファイルを作る。存在していれば読みこむ
    FMDatabase *db= [FMDatabase databaseWithPath:[dir stringByAppendingPathComponent:@"file.db"]];
    NSString *sql = @"CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY AUTOINCREMENT,testname TEXT);";
    [db open];
    [db executeUpdate:sql]; //SQL実行
    [db close];

    return YES;
}

一応、アプリ立ち上がった時に実行するように組んでます。
うん、フォルダを検索して、なければ作る。ただそれだけ。

補足:ヘッダーに
#import "FMDatabase.h"
#import "FMResultSet.h"
を付けてください。

SQLを実行する

INSERT UPDATEを実行
//INSERT文を作る
NSString *insertSQL = @"INSERT INTO test(testname) VALUES (?)";
[db open];
//?に値を入れる配列を作る
NSArray *insertArgument = [[NSArray alloc] initWithObjects:@"test", nil];
//SQLを生成
[db executeUpdate:insertSQL withArgumentsInArray:insertArgument];
[db close];

通常のSQLを生成して、動的に変化させる部分を配列で作っています。
SQLをexecuteUpdateで実行しています。

SELECTを実行
NSString *selectSQL = @"select * from test";
[db open];
//結果を取得
FMResultSet *results = [db executeQuery:selectSQL];
//結果を取り出し
while( [results next] ){
   //テストネームのカラムを取得する
   NSString *testname = [results stringForColumn:@"testname"];
   NSLog(@"%@",testname);
}
[db close];

同じようにSQLを生成していますが、実行するメソッドをexecuteQueryを使用しています。
取得した結果をFMResultSetに格納し、whileにより、一つ一つ処理しています。

参考文献

http://plus.vc/web/6921/

次は何しよう。