Skip to main content
iOSでデータベース(SQLite)を	
  
使おう	
榊原防犯(株)代表取締役	
  
榊原 洋平
だれ?	
•  榊原防犯(株)という株式会社を一人でやって
ます	
  
– 事業は今はアプリ受託開発メイン	
  
•  iOSもandroidも	
  
– 自社アプリも作ってます	
  
•  Simple	
  Photo	
  Album	
  
•  ふせん手帳	
  
•  超速300連写	
  
•  などなど…	
  
この発表のテーマ	
•  iOSで使えるデータベース、SQLiteを(外部ライ
ブラリに頼らず)使えるようになろう!	
  
•  使えると何がうれしいの?	
  
– アプリ内でたくさんのデータを保存したり読み込
んだりできるようになります!	
  
•  住所録とか、メモ帳とか、閲覧履歴とか…	
  
– 大量の辞書データを用意するのにも便利	
  
•  顔文字アプリとか、まあいろいろ…	
  
目次	
•  とりあえずサンプルを触ってみよう	
  
•  アプリ内にデータを保存する方法あれこれ	
  
•  SQLiteってなんだろう?	
  
– RDBMSとは	
  
– SQLとは	
  
•  iOSでSQLiteを使うための手順	
  
•  私はこんな風に工夫してます	
  
•  気をつけておくべきポイント	
  
とりあえずサンプルを触ってみよう	
•  サンプルプロジェクトをダウンロードしてね	
  
h?p://www.ysakaki.net/sample/	
  
•  ダウンロードできたら、動かしてみよう!	
  
アプリ内にデータを保存する方法あれこれ	
•  NSUserDefaults	
  
–  お手軽	
  
–  多数・大容量のファイルを扱うには遅い	
  
–  設定などちょっとした値の保存に便利	
  
•  SQLite	
  
–  ちょっと手間	
  
–  速い	
  
–  SQLをそのまま使えるので、SQLがわかる人は習得が早い	
  
•  わからない人は覚えることが増える…	
  
•  CoreData	
  
–  内部でSQLiteを使っているらしい	
  
–  Objectをそのまま保存できるとか	
  
–  速いらしい	
  
–  iCloudとの連携がしやすいらしい	
  
–  なんだか難しいので使ってません	
  
•  iCloud以外はSQLiteのみで十分対応可能	
  
•  自分でファイルを作って保存	
  
–  うまくやれば多分一番速い	
  
–  複雑なデータの保存は非常に面倒	
  
–  画像や動画の場合は、SQLiteにはパスだけ保存とか	
  
SQLiteってなんだろう?	
•  SQLiteとはRDBMSのひとつ	
  
– 手軽に扱えるRDBMS	
  
•  型とかゆるい	
  
– データベースを単一のファイルとして扱う	
  
– 機能は少なめ、速度は遅め	
  
•  とはいえ、アプリでは充分すぎるくらい	
  
RDBMS??	
•  リレーショナルデータベースマネジメントシス
テム	
  
– RDBを扱うシステム	
  
– RDBでは、データを表のような感じで扱います	
  
•  一つの表をテーブルと呼びます	
  
•  一つの行をレコードと呼びます	
  
– テーブル同士のリレーション(関係)を定義して
テーブル同士を連結できます	
  
– データをSQLという言語を用いて操作します	
  
データベース	
カラム1	
 カラム2	
 カラム3	
 カラム4	
値	
 値	
 値	
 値	
テーブル1	
ID	
 名前	
 性別	
 年齢	
1	
 ジョン	
 男	
 13	
2	
 マイケル	
 男	
   24	
3	
 キャシー	
 女	
 19	
テーブル2	
レコード
SQL??	
•  RDBMSにおいてデータの操作や定義をする
ための言語	
  
•  とりあえず4つ覚えましょう	
  
–  挿入:INSERT	
  INTO	
  [表名]	
  VALUES	
  ([値1],	
  [値2])	
  
–  更新:UPDATE	
  [表名]	
  SET	
  [列名2]=[値2],	
  [列名3]=[値3]	
  WHERE	
  [列名1]=[値1]	
  	
  
–  削除:DELETE	
  FROM	
  [表名]	
  WHERE	
  [列名1]=[値1]	
  
–  検索:SELECT	
  *	
  FROM	
  [表名]	
  WHERE	
  [列名1]=[値1]	
  
•  アプリならこの4つだけでも大抵なんとかなり
ます	
  
– サンプルもこの4つのみを使ってます
iOSでSQLiteを使うための手順	
  
(下準備)	
1.  SQLiteのデータベースファイルを作成する	
– ツール等を使って事前に作成しておく	
•  私はFirefoxアドオンのSQLite Managerを使ってます	
– テーブルや初期データはこの時に設定しておく	
– 作ったデータベースファイルはプロジェクトへコ
ピーしておく	
•  ターゲットの指定を忘れずに	
2.  libsqlite3.0.dylibをBuild	
  PhasesからLinkする	
  
iOSでSQLiteを使うための手順	
  
(仕込み)	
1.  ファイルをバンドルからワークディレクトリへ
コピーする	
  
– バンドルのファイルは変更不可のため	
  
2.  コピーしたデータベースを開く	
  
iOSでSQLiteを使うための手順	
  
(実行)	
1.  SQL文を用意する	
  
2.  SQL文を評価する	
  
3.  必要であれば、値をバインドする	
  
4.  SQL文を実行する	
  
私はこんな風に工夫してます	
•  DBを扱う専用のクラスを用意する	
  
•  DBを扱うクラスはシングルトン	
  
•  テーブル毎のモデルクラスを用意する	
  
•  NSStringやNSDataを扱いやすいような関数を
用意する
気をつけておくべきポイント	
•  アップデートのときは要注意	
  
–  データベースファイルを入れ替えても、古いデータベースは残ったま
ま!	
  
–  構造を変えたときは、その変更を反映させる必要がある	
  
•  古いデータベースを消して上書きする	
  
–  それまでのデータが消えてしまう	
  
–  簡単	
  
–  開発中の変更はとりあえずこっちで	
  
•  SQLでデータベースの構造を書き換える	
  
–  ALTER	
  TABLEなどをiOS上で実行	
  
–  めんどくさい	
  
–  他にどうしようもないならやるしかない	
  
–  辞書データだけ変えたい場合	
  
•  辞書データ用のデータベースとユーザーデータ用のデータベースの2つを
別々に持っていると便利	
  
•  辞書データのみアップデート時に上書き	
  
•  2つのデータベースを連結(ATTACH)して使えばOK	
  
おしまい	
質疑応答	
  
	
  
	
  
懇親会でもよろしくね