SQL講座(6) | TokoTokoSoftware

TokoTokoSoftware

iPhone / iPadアプリを作っている団体「トコトコ」です
大学生二人でMacBookつかって頑張ってます!!

久しぶりのSQL講座です!


前回でちょうどSQL自体の説明は一区切りついたので、
今回からiPhoneでプログラムでしたね!



SQL講座その6

<目次っぽい何か>
・iPhoneでのSQLiteを使う下準備       ←今日ここから
・SQL関連関数
・実際にSQLを書いてみる
・データを取り出してみる
・ライブラリ化


目次もちゃんと更新しときました!

今日はSQL関連関数までの予定です!


1.iPhoneでのSQLiteを使う下準備
iPhoneでは残念ながらSQLをデフォルトの状態では使うことができません。
なので、SQLのライブラリをインクルードしてあげる必要があります!

SQLのライブラリは「libsqlite3.0.dylib」というものです。
では追加してみましょう。


まず、x-codeを起動して、新規プロジェクトを選択してください
TokoTokoSoftware-新規プロジェクト

プロジェクトのタイプはここではView-Basedにします。
TokoTokoSoftware-view-based
プロジェクト名を適当に決めて(自分はdatabaseです)、新規プロジェクトを作ってください。

・・・・・ここら辺はiPhoneプログラムを作ってる人なら大丈夫ですよね?

TokoTokoSoftware-起動直後


この後ですが、左にも上にもファイル一覧が来る表示方法は
ちょっと自分の好みに合わないので少し変更します。
これは好みの問題なのでやらないでも大丈夫です

表示からエディタの拡大を押してください
TokoTokoSoftware-エディタ拡大

すると、上に表示されていたファイル一覧が消えます
これで広く使ってソースがかけますね!
TokoTokoSoftware-エディタ拡大後


で、ここからが本題な訳ですが、下準備は
①ライブラリをプロジェクトに入れる
②ライブラリ内のヘッダファイルをインクルードする

この二つで終わりです!
かんたんですね??

では①から順にやっていきましょう

左のファイル一覧リストの
Frameworksフォルダを右クリック
 → 追加
 → 既存のフレームワーク
をクリックしてください。
TokoTokoSoftware-既存のフレームワーク


すると、ライブラリファイルの一覧が出てきます。
ここで「libsqlite3.0.dylib」を選択すれば、プロジェクト内にライブラリファイルが追加されます
TokoTokoSoftware-sqlite3.0
これで①は終わりです

②はもっと簡単で、データベース使いたいな~っていうファイルの先頭に
「#import "sqlite3.h"」
って書くだけです
TokoTokoSoftware-import

以上でした準備完了!!
簡単でしょ?



2.SQL関連関数
SQLライブラリにはいろいろな関数が入っています。その役割を少し見てみましょう

SQLを実行するときには
①データベースを開く
②SQLを書く
③SQLを実行する
④データを得る
⑤データベースを閉じる
の順で処理します。

データを保存しろ とか ここのデータを読んで とか言うのは全部SQLの方で指定してあげるので、
SQLを書いて実行できてしまえば後はSQL以外のところはいじらないですんじゃいます。

では、具体的にどんな関数なのかを見てみましょう。

①データベースを開く
⑤データベースを閉じる

この二つは実際にデータベースファイルを開いたり閉じたりする処理になります。
fopen と fclose のようなものです。

具体的には
sqlite3_open( ファイル名 , &ファイルポインタ);
sqlite3_close( ファイルポインタ );
とかきます。

ファイル名は・・・そのまま保存するファイル名で、
ファイルポインタってのは今扱っているのがどのファイルなのかを表す変数みたいなものです。
さらに具体的なソースコードは次回・・・・ということで(^▽^;)



②SQLを書く
こちらも1文でできます

sqlite3_prepare_v2( ファイルポインタ , SQL文 , SQLの長さ , &ステータス変数 , NULL )

ファイルポインタはsqlite3_openで使ったのと同じものを
SQL文は・・・SQL文を
SQLの長さはSQL文の長さをバイトで(めんどくさければ-1を書けば勝手に計算してくれます)
ステータス変数ってのは、ファイルポインタのSQL版みたいなので、今扱ってるSQLがどれなのかを表す変数みたいなのです

最後のNULLは・・・・あまり気にしないでください。
かなり上級者にならないとここは使いませんので
(上級者になっても使わないことがほとんどです。)


③SQLを実行する
④データを得る

これは少し面倒です。
実はデータを一気に配列で取得!とかができなくて、一行一行、ひとつひとつの情報しかとれないんです・・・・
流れとしては
 一行目のデータを読み込む
 一行一列目のデータを取得
 一行二列目のデータを取得
 一行三列目のデータを取得
 ・・・・
 二行目のデータを読み込む
 二行一列目のデータを取得
 二行二列目のデータを取得
 二行三列目のデータを取得
 ・・・・
と言った感じになります。

n行目のデータを読み込む所は
sqlite3_step(ステータス変数);
で行います。
これを何度も行うことで、次の行、次の行と読み込むデータが移っていきます。
前の行に戻るなどはないので注意が必要です

n行m列目のデータを取得するときは
sqlite3_column_text(ステータス変数, m)
sqlite3_column_int(ステータス変数, m)

などと書きます。

複数あるのは型によってかわるからで、ほかにもsqlite3_column_doubleなどがあります。
mは何列目かの数字で、こちらは自由に数がかえられます。
つまり、
 一行一列目のデータを取得
 一行三列目のデータを取得
 一行二列目のデータを取得
と言った風に同じ行内であればデータを取得する順序を入れ替えることもできます。


で、データが取得終わったらもう終わったよということで

sqlite3_finalize(ステータス変数);

を行うことが必要です。







今回はここまでです!
次回で実際にSQLを実行してみます!

それではまた次回!