【cocos2dx】SQLiteを利用したデータ管理(保存、読み込み)

データの永続性を確保する際に、今まではUserDefaultクラスを利用してきました。 ただ、cocos2dxでは、それ以外にも方法があります。それが[SQLite]を利用する方法です。 今回は、この[SQLite]についてブログに書いていきたいと思います。

利用準備

SQLiteを利用する際に必要なことは以下の通りです。

SQLiteをダウンロードする

まずはサイトから、SQliteをダウンロードして下さい SQLite Download Page

プロジェクトに追加する

必要なファイルは以下の3つです。

  • sqlite3.c
  • sqlite3.h
  • sqlite3ext.h
2014-6-10-hgdfd

ヘッダーで読み込む

後は利用する際に、ヘッダーを読み込みます。 [c]

include "sqlite3.h"

[/c]

Android側の設定

sqliteを読み込めるようにAndroid.mkを変更します。 [c] LOCAL_SRC_FILES +=../../Classes/sqlite3.c [/c]

実際に利用する

コードは非常に長いので、GitHubを利用します。 こちらを参考にして下さい。 GitHub : albatrus/SQLite_cocos2dx

元のコードは、「Cocos2d‐xレシピ本」を参考にしています。

SaveSQLクラスの利用準備

まず、ファイルをプロジェクトに追加をして下さい。 その後、ヘッダーで必要な場所で読み込んで下さい。 [c]

include "SaveSQL.h"

[/c]

利用する

SaveSQLクラスでは、以下のことが可能です。
  • データベースの作成
  • [key][value]の設定
  • [value]の変更
  • [value]の取り出し

データベースの作成

まずは、データベースを作成します。 [c] SaveSQL::sqliteCreateTable(); [/c]

データベース名が[sample.db]、テーブル名が[test1]のデータベースが作成されます。 この、データベース名やテーブル名は好きに変更して下さい。

データベースに値を入力する

作成されたデータベースのテーブルに値を入れていきます。 今回作成しているテーブルは、[key][value]の2つの値があります。 [c] //前がkey ,後ろがvalueです SaveSQL::sqliteSetValueForKey("key1", "hopehoge"); SaveSQL::sqliteSetValueForKey("key2", "albatrus"); SaveSQL::sqliteSetValueForKey("key3", "cocos2dx"); [/c]

このようにデータベースに値を設定していきます。

データベースに値を更新する

すでに設定されている[key][value]を更新するには、sqliteUpdateValueForKey()を利用します。 [c] //前がkey ,後ろがvalueです SaveSQL::sqliteUpdateValueForKey("key", "changehogehoge"); [/c]

データベースに値を取り出します

[key]に対応する[value]を取り出します。 [c] //[key]を指定して下さい。 const char *hoge = SaveSQL::sqliteGetValueForKey("key1"); CCLOG("key2の値 : %s",hoge); [/c]

最後に

私は、これまでデータベースを触ったことがないですが、iOS/Android共に実機でデータ保存・読み込みができているので大丈夫だと思います。 ただ、実際に利用するにはSQLの構文をもっと勉強しないといけないと感じました。

この構文です。 [c] //テーブル作成 const char sql_createtable = "CREATE TABLE test1(key TEXT,value TEXT)"; //データ作成 const char sql_select = "REPLACE INTO test1(key,value)VALUES(?,?)"; //keyに対するvalueの取り出し const char *sql_select = "SELECT value FROM test1 WHERE key=?"; [/c]

今後、私がやりたい事は、複数のデータを管理していくことです。 UserDefaultクラスでは、keyに対して1つのデータしか管理ができないからです。 データの読み込み速度や、実際にそれができるかはまだ確認できていませんので、この辺りを上手くやっていきたいと思っています。

後、「Cocos2d-xでiPhone&Androidアプリ開発記7 SQLiteの注意点」というエントリーがとても気なっているのですが、今のところ問題が出てないので大丈夫なのかな。 もし、SQLに関して良い方法、またコードが間違っているなどありましたら、ぜひ連絡をいただけると嬉しいです。

Cocos2d‐x開発のレシピ―iOS/Android対応Cocos2d‐x開発のレシピ―iOS/Android対応
松浦 晃洋,齊藤 建二,古木 映治

秀和システム
売り上げランキング : 53292

Amazonで詳しく見る