iPhoneでSQLite3を使う1(SQLite起動とファイルの作成)
なぜいまさら、SQLiteなのか。それはCore Dataに挫折したからです。私がOracleとかSQL Serverに慣れ親しんでいるからというのもあるのですが、Core Data使いにくい。DB(データベース)を使ったことがない人はSQLが障壁になるのかもしれませんが、より複雑なこともできること、他の言語でも使えることが強みです。
やれることは、データを表形式に格納して永続化(アプリ終了しても残る=ファイルに保存)することができます。そしてその永続化データから、抜き出したり、並び替えることができます。それら操作を、行うのがSQLという言語です。だいたいのDBがこのSQLという言語を標準として作られていますので、一回勉強しておけば、サーバアプリを組むときにも使えます。ただし、方言があるためSQLite独自の関数などもあるため、SQLiteで使えるものが何なのかはリファレンスを参照ください。
では、SQLite語り尽くされているところですが、いまいちど初歩的なところからはじめたいと思います。
最初は起動ですね。SQLiteはターミナルから起動します。ターミナルを起動し、sqlite3と叩きます。
Last login: Sun Mar 6 00:08:08 on console macmini:~ ovjang$ sqlite3 SQLite version 3.6.12 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite>
「sqlite>」というプロンプトが起動され、コマンド待ち状態となります。この状態でSQLを発行したり、コマンドを発行することができます。
この状態で、「.help」と叩いてみましょう。
sqlite> .help .backup ?DB? FILE Backup DB (default "main") to FILE .bail ON|OFF Stop after hitting an error. Default OFF .databases List names and files of attached databases .dump ?TABLE? ... Dump the database in an SQL text format .echo ON|OFF Turn command echo on or off .exit Exit this program .explain ON|OFF Turn output mode suitable for EXPLAIN on or off. ・ ・ ・ .quit Exit this program .read FILENAME Execute SQL in FILENAME .restore ?DB? FILE Restore content of DB (default "main") from FILE .schema ?TABLE? Show the CREATE statements .separator STRING Change separator used by output mode and .import .show Show the current values for various settings .tables ?PATTERN? List names of tables matching a LIKE pattern .timeout MS Try opening locked tables for MS milliseconds .timer ON|OFF Turn the CPU timer measurement on or off .width NUM NUM ... Set column widths for "column" mode
コマンドの一覧が表示されました。終了は、「.quit」みたいですね。叩いてみます。
sqlite> .quit
ターミナルに戻りました。バックアップとったり、SQLの実行時間を測るオプションかな?そんなのがありそうです。
DBを利用するには、まずDBファイルを作り、その中にさらにデータの入れ物にあたるテーブル(表)を作成します。ここまではターミナルでの作業です、さっそくファイルを作っていきましょう。
DBのファイルを作るには、さっきのsqlite3に引数でファイル名を渡して起動することで、DBファイルが作成されます。
とりあえず、twitterでのユーザ情報を保存するDBをサンプルに作成していきます。DBファイル名は、twitterDB.sqliteとしておきます。
ターミナルで「sqlite3 twitterDB.sqlite」と叩きます。
macmini:Sample06 ovjang$ sqlite3 twitterDB.sqlite SQLite version 3.6.12 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite>
何も表示されません。確認するため、「.database」と叩いてみます。
sqlite> .database seq name file --- --------------- ---------------------------------------------------------- 0 main /Users/ovjang/Documents/Sample06/twitterDB.sqlite sqlite>
お、ちゃんと作られているみたいです。
では、このままテーブルも作成していきます。テーブルは構造体の配列みたいなもので、これもSQLで作成します。作成は、CREATE TABLE文を使い、配列の要素名と型を指定することで作成することができます。
テーブル名をuserinfoとして、IDや名前などを要素とします。SQLはこんな感じです。
CREATE TABLE userinfo ( 'ID' integer, 'name' text, 'screen_name' text, 'profile_image_url' text, 'followers_count' integer, 'friends_count' integer, 'text' text );
では、叩いてみます。
sqlite> .database seq name file --- --------------- ---------------------------------------------------------- 0 main /Users/ovjang/Documents/Sample06/twitterDB.sqlite sqlite> CREATE TABLE userinfo ( ...> 'ID' integer, ...> 'name' text, ...> 'screen_name' text, ...> 'profile_image_url' text, ...> 'followers_count' integer, ...> 'friends_count' integer, ...> 'text' text ...> ); sqlite>
確認するため、こんどは「.schema」と叩いてみます。
sqlite> .schema CREATE TABLE userinfo ( 'ID' integer, 'name' text, 'screen_name' text, 'profile_image_url' text, 'followers_count' integer, 'friends_count' integer, 'text' text );
これでテーブルの作成は、完了です。Objective-Cからテーブルの作成、削除もできますが。基本的にデータの構造は変わらないでしょう。表まではターミナルで作成して、表からのデータの出し入れだけをプログラムから行うというのが良いかと思います。