まず、SQLiteライブラリをiPhoneアプリから使う方法をどう調べるかだけど、AppleにはSQLiteのC用ライブラリを提供しますYo~。と書かれている程度で、それ以上のドキュメントはなさそうでした。
FAQにどうやってSQLite使えばいいのっていう質問があって、これの答はサンプルプロジェクトSQLiteBooksを読んで勉強してってことなんで、
iPhone Dev Center > iPhone Reference Library > Topics > Data Management >
にリストアップ(ここまでは登録者でなくても見れるはず)される
をダウンロード(これは登録が必要)します。
どうやらSQLiteのAPIは本家www.sqlite.orgのドキュメントを読んでいくことになりそう。注意)このサイトの日本語訳を進めているサイト(SQLite ドキュメント)なんてのもあるみたい。ありがたい。
http://www.sqlite.org/
SQLite ドキュメント
ま、なんにせよSQLiteBooksプロジェクトの解析ですが、ライブラリとしては
をリンクする必要があるみたい。
利用するにはヘッダーファイルとしては
を使います。
で、SQLiteライブラリのAPIはsqlite3_*が基本なので、試しに編集>検索>プロジェクト内で検索...メニューで出てくる検索ダイアログを使ってプロジェクト内を"sql"部分一致でサーチしてみると
![テン・シー・シー-fig.1](https://stat.ameba.jp/user_images/20090421/00/xcc/fb/fe/j/o0400024110168990428.jpg?caw=800)
なんて感じで4つのソースファイル(ReadMe.txtはソースファイルではない)にヒット。
当然、まっさきに調べるのはAppDelegate.mのapplicationDidFinishLaunchingとなります。この中で呼び出されているinitializeDatabaseてのがsqlite3関連みたいですな。createEditableCopyOfDatabaseIfNeededの方は、もともと用意していたデータベースファイルを変更可能なようにアプリケーションのドキュメントディレクトリにコピーしてるだけで、sqlite3のAPIはとくに使ってないっす。
ただし、自分のアプリが利用できるドキュメントディレクトリの所得方法やファイルのコピーの仕方なんかは参考になりますね。
initializeDatabase
やってることはデータベースファイルのオープンと、pkという項目の全データ所得です。これはこれまでのお勉強によって
て部分から想像できるよね。pkとかテーブル名や項目名はプロジェクトに登録されている
から取り出すわけなので、このファイルを、この前のsqlite3で読み込んで.dumpコマンド使ってみました。
まず、ターミナルを起動して
と打ち込んで(sqlite3の後ろにスペースキーを入れておく)おき、プロジェクトからbookdb.sqlをドラッグアンドドロップすると
![テン・シー・シー-fig.2](https://stat.ameba.jp/user_images/20090421/00/xcc/7b/34/j/o0550044010168990432.jpg?caw=800)
というふうになるので、このままリターン。入ったsqlite3プロンプトで
とすれば、こんな感じでデータベースファイルのテーブル名や項目名、データが表示されます。
![テン・シー・シー-fig.3](https://stat.ameba.jp/user_images/20090421/00/xcc/52/54/j/o0550024210168990436.jpg?caw=800)
内容的には
というデータベースで、3つのデータが入力済みてのがわかります。これでsqlite3は用がなくなったので.quitで終了。
次回、initializeDatabaseメソッドの
をSQLiteのAPIドキュメントと照らし合わせながら調査してきましょう。
FAQにどうやってSQLite使えばいいのっていう質問があって、これの答はサンプルプロジェクトSQLiteBooksを読んで勉強してってことなんで、
iPhone Dev Center > iPhone Reference Library > Topics > Data Management >
にリストアップ(ここまでは登録者でなくても見れるはず)される
SQLiteBooks
をダウンロード(これは登録が必要)します。
どうやらSQLiteのAPIは本家www.sqlite.orgのドキュメントを読んでいくことになりそう。注意)このサイトの日本語訳を進めているサイト(SQLite ドキュメント)なんてのもあるみたい。ありがたい。
http://www.sqlite.org/
SQLite ドキュメント
ま、なんにせよSQLiteBooksプロジェクトの解析ですが、ライブラリとしては
/Developer/Platforms/iPhoneOS.platform/
Developer/SDKs/iPhoneOS2.0.sdk/usr/lib/libsqlite3.0.dylib
をリンクする必要があるみたい。
利用するにはヘッダーファイルとしては
sqlite3.h
を使います。
で、SQLiteライブラリのAPIはsqlite3_*が基本なので、試しに編集>検索>プロジェクト内で検索...メニューで出てくる検索ダイアログを使ってプロジェクト内を"sql"部分一致でサーチしてみると
![テン・シー・シー-fig.1](https://stat.ameba.jp/user_images/20090421/00/xcc/fb/fe/j/o0400024110168990428.jpg?caw=800)
なんて感じで4つのソースファイル(ReadMe.txtはソースファイルではない)にヒット。
Book.h/m
AooDelegate.h/m
当然、まっさきに調べるのはAppDelegate.mのapplicationDidFinishLaunchingとなります。この中で呼び出されているinitializeDatabaseてのがsqlite3関連みたいですな。createEditableCopyOfDatabaseIfNeededの方は、もともと用意していたデータベースファイルを変更可能なようにアプリケーションのドキュメントディレクトリにコピーしてるだけで、sqlite3のAPIはとくに使ってないっす。
ただし、自分のアプリが利用できるドキュメントディレクトリの所得方法やファイルのコピーの仕方なんかは参考になりますね。
initializeDatabase
やってることはデータベースファイルのオープンと、pkという項目の全データ所得です。これはこれまでのお勉強によって
const char *sql = "SELECT pk FROM book";
て部分から想像できるよね。pkとかテーブル名や項目名はプロジェクトに登録されている
bookdb.sql
から取り出すわけなので、このファイルを、この前のsqlite3で読み込んで.dumpコマンド使ってみました。
まず、ターミナルを起動して
sqlite3
と打ち込んで(sqlite3の後ろにスペースキーを入れておく)おき、プロジェクトからbookdb.sqlをドラッグアンドドロップすると
![テン・シー・シー-fig.2](https://stat.ameba.jp/user_images/20090421/00/xcc/7b/34/j/o0550044010168990432.jpg?caw=800)
sqlite3 bookdb.sqlのフルパス
というふうになるので、このままリターン。入ったsqlite3プロンプトで
.dump
とすれば、こんな感じでデータベースファイルのテーブル名や項目名、データが表示されます。
![テン・シー・シー-fig.3](https://stat.ameba.jp/user_images/20090421/00/xcc/52/54/j/o0550024210168990436.jpg?caw=800)
内容的には
テーブル名:
book
項目名: 項目データ種類:
pk INTEGER PRIMARY KEY
title CHAR(32)
copyright REAL
author CHAR(48)
というデータベースで、3つのデータが入力済みてのがわかります。これでsqlite3は用がなくなったので.quitで終了。
次回、initializeDatabaseメソッドの
sqlite3_open
sqlite3_prepare_v2
sqlite3_step
sqlite3_finalize
をSQLiteのAPIドキュメントと照らし合わせながら調査してきましょう。