2012年10月20日土曜日

FMDatabaseで最後にインサートしたレコードの_id取得

iOSでもAndroidでも,データベースはsqliteを使っています。
sqliteは小中規模のデータベース管理ソフトで,主にサーバではなくアプリケーションに組み込む形で使われています。

iPhoneではさらにラッパーとしてFMDatabaseを使用しています。
iOSのsqliteのライブラリはC言語のライブラリで提供されているようで,開発上,文法や型変換がネックになりかねません。
そこを吸収してくれるのがFMDatabaseです。

前置きはこれくらいで,今回は最後にテーブルに書き込んだレコードのidの値を取得する方法を記録しておきます。

FMDatabase *db = [self getDB];
int lastInsertId;
if([db executeUpdate:@"INSERT INTO TABLE1(RECORD1) VALUES(?)", record1]){
        lastInsertId = [db lastInsertRowId];
    }
    else{// 登録に失敗した場合
        NSLog(@"ERROR: %d: %@", [db lastErrorCode], [db lastErrorMessage]);
        [db close];
        return NO;
    }
}
[db close];

*getDBはファイルパスとか指定してdatabaseオブジェクトを取得するメソッドです。

上記のようにしてインサート直後にlastInsertRowIdメソッドでそのレコードのidを取得できます。

気をつけなければならないのは,[db close]後はもう取得できないということです。
後々に使用するのであれば,変数に値をコピーしておく必要があります。

ちなみにsqliteでは,たいていテーブルに_id列という一意の値が入る列を作成します。
上記で取得される値はこの_id列の値と同じです。

今日はこのあたりで。

0 件のコメント:

コメントを投稿