Skip to content
Tags

[2011/7/25追記] FMDBをつかってiPhoneで簡単にSQLiteを使う

2011年7月4日

CoreDataがさっぱりわからんので、やっぱりFMDBを使う。

2012/1/20追記
サンプルプロジェクト作ってみました。
よろしければどうぞ〜。

2011/7/25追記
※あらかじめターミナルでSqliteのDBを作っといてください。
そしてそれをXcodeプロジェクトにインポートしておかないとまず動かないので
気をつけてください 。ソースの中にある「sample.db」っていうのがそのDB名です。

●FMDB
https://github.com/ccgus/fmdb

使い方は簡単。上からFMDBの本体をDLしてきて、プロジェクトに、
・FMDatabase.h/m
・FMResultSet.h/m
・FMDatabaseAdditions.h/m
の6つを追加。

あと、ライブラリとして、
・libsqlite3.0.dylib
を追加する。

そしてFMDatabaseとFMDatabaseAdditionsをインポートして使います。

参考では接続からなにまで全部ひとまとめに書いてあるけど、接続部分を分割したほうが使い勝手は良いよねってことで分割した。

●接続部

//DBへ接続する
-(id) dbConnect{
    BOOL success;
    NSError *error;
    NSFileManager *fm = [NSFileManager defaultManager];
    NSArray  *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"sample.db"];
    NSLog(@"%@",writableDBPath);
    success = [fm fileExistsAtPath:writableDBPath];
    if(!success){
        NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"sample.db"];
        success = [fm copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
        if(!success){
            NSLog(@"%@",[error localizedDescription]);
        }
    }

    FMDatabase* db = [FMDatabase databaseWithPath:writableDBPath];
    return db;

}

あとはお好きなところで、

    FMDatabase* db = [self dbConnect];
    if ([db open]) {
        [db setShouldCacheStatements:YES];

        // SELECT
        FMResultSet *rs = [db executeQuery:@"SELECT * FROM test2"];
        while ([rs next]) {
            NSLog(@"%d %@", [rs intForColumn:@"test2id"], [rs stringForColumn:@"name"]);
        }
        [rs close];
        [db close];
    }else{
        NSLog(@"Could not open db.");
    }

とか

    FMDatabase* db = [self dbConnect];
    if ([db open]) {
        [db setShouldCacheStatements:YES];

        //insert
        [db beginTransaction];
        int i = 0;
        while (i++ < 20) {
            [db executeUpdate:@"INSERT INTO test2(name) values (?)" , [NSString stringWithFormat:@"にほんご%d", i]];
            if ([db hadError]) {
                NSLog(@"Err %d: %@", [db lastErrorCode], [db lastErrorMessage]);
            }
        }
        [db commit];
        [db close];

    }else{
        NSLog(@"Could not open db.");
    }

とかする。

2011/7/25追記
あと、実際にシミュレータ上で実行されているDBは、シミュレータのディレクトリの中にあります。

Liblary > Application Support > iPhone Simulator  > 4.3.2(ここはシミュレータのバージョンに依存) > Applicatins > どれかのディレクトリ > Documents
の中にそのDBがあるはず。

シミュレータ内で使用しているDBの中身を確認するときはそれを見ること。

参考

http://d.hatena.ne.jp/ntaku/20090305/1236263419

広告

From → iPhone開発

コメントする

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。