2015-02-27 22.20.13

【c++】SQLiteの導入と基本的な操作

LINEで送る
Pocket

このブログでは、
・SQLiteのプロジェクト導入
・sqlの実行
をするところまで解説します。


sample code
daiki1003/cocos_sqlite_sample

SQLiteのプロジェクト導入


すごく簡単です。

・sqliteのダウンロード
・プロジェクトへの追加
・コーディング

の3stepです。(だいたいそうか笑

sqliteのダウンロード

SQLite Download Pageよりダウンロードします。
今回はamalgamation (一番上のリンク)をダウンロードしました。執筆時点では3.8.8.3が最新です。
※amalgamationは混合とかって意味らしいです。

注意!
もしupdate文を打つ際にlimitもしくはorder byを使用する予定がある方はamalgamationではなく生のソースコードをダウンロードしてコンパイルして入れてください。


それに関してはこちらのエントリで。
【c++】sqliteのupdateはlimit出来ない
また、生のソースからの入れ方については当記事では説明しておりません。

プロジェクトへの追加

以下3つのファイルを追加します。
sqlite3.c
sqlite3.h
sqlite3ext.h

ここまでで導入は終わりです。簡単でしょう?

コーディング


では実際にソースを書いてみましょう。
最終系はこんな感じです。


出力

cocos2d: open successed!
id = 1
age = 20


解説


上記のコードを読んで理解出来る人は多分解説はいらないと思います。

L1〜L2   DBの場所を用意
L4〜L12   databaseをopen
L14〜L17  userテーブルの作成
L19〜L22  userにデータをinsert
L24〜L27  userデータをupdate
L29〜31  userデータをselect
L34    最後は必ずdatabaseをclose

さて、selectのexecの第3引数だけcallbackが指定されています。
コールバックは以下の様になっています。


第一引数:今回使っていませんが、呼び出し元のインスタンスが入っています。
第二引数:カラム数
第三引数:データの値の配列
第四引数:カラム名

callback以外にないのか?


さて、先ほどの書き方で少し問題が出てきます。
callback関数が別関数になってしまっているので処理が煩雑になりがちです。

もう一つの書き方を紹介します。


出力は先ほどと同じです。

L1   状態を表す変数statementを用意
L3   sqlをコンパイル
L6   sqlite3_stepでsqlを実行
L7   sqlite3_column_countでカラム数を取得
L10  sqlite3_column_nameでi番目のカラム名を取得
L11  sqlite3_column_typeでカラムのタイプ(int, char…)を取得
L12  sqlite3_column_*で各タイプの値の取得

このような形になります。

誰かのお役に立てば。

このブログのcocos記事一覧

LINEで送る
Pocket

Dalt

translimit, Inc. Application Engineer. Twitter: @daiki1003 Facebok: Daiki Asahi

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です