タイトル通りです。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というグループを作って中に入れました。
![【iPhoneアプリ】SQLiteでデータベースを使ってみる、FMDB、Litaなどを紹介4 【iPhoneアプリ】SQLiteでデータベースを使ってみる、FMDB、Litaなどを紹介4](http://blog.oukasoft.com/wp-content/uploads/b4277cec73ba7f932ed32606089d3c53-320x312.jpg)
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などを紹介1](http://blog.oukasoft.com/wp-content/uploads/24d54aaf0f57fb6712424290cd1791e4-320x244.png)
![【iPhoneアプリ】SQLiteでデータベースを使ってみる、FMDB、Litaなどを紹介2 【iPhoneアプリ】SQLiteでデータベースを使ってみる、FMDB、Litaなどを紹介2](http://blog.oukasoft.com/wp-content/uploads/2c6952f47fd8bb2364a9039d1f253450-320x230.png)
こんな感じ。
これで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 【iPhoneアプリ】SQLiteでデータベースを使ってみる、FMDB、Litaなどを紹介3](http://blog.oukasoft.com/wp-content/uploads/253d44763244f9fbd0a286a0b6b52464-320x274.png)
「test.db」というファイルが作成されています。
ちゃんとテーブルが作成されているか、SQLiteクライアントソフトを使って確認してみます。
「SQLite」データベースの管理ソフト「Lita」を使ってDBの中身を確認
Litaはフリーソフトなのでこちらからダウンロードできます。
http://www.dehats.com/drupal/?q=node/58
(AIRというFLASHの親戚みたいな仕組みで動いているので、動かすにはAIRのインストールが必須です。)
インストールが済んだら、実際にdbファイルを開いてみましょう。
テーブルが作られているのが確認できます。
![【iPhoneアプリ】SQLiteでデータベースを使ってみる、FMDB、Litaなどを紹介6 【iPhoneアプリ】SQLiteでデータベースを使ってみる、FMDB、Litaなどを紹介6](http://blog.oukasoft.com/wp-content/uploads/2762c6839fd48b0c3a0ca07fc3090728-320x219.png)
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 【iPhoneアプリ】SQLiteでデータベースを使ってみる、FMDB、Litaなどを紹介5](http://blog.oukasoft.com/wp-content/uploads/3bf670f3ce89636726abd450bac1a80c-320x219.png)
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ヽ、─────────────────
/~~~
./