Skip to content

cocos2d-x(cocos2d-2.0-x-2.0.4 @ Nov 02 2012)でsqliteを動かす

2012年12月2日

Facebookのコミュニティで質問したところ下記URLを参考で動いたよとのことで参考にした

http://cocos2d-x.org/boards/6/topics/7006

ほかも探してると下記にコードっぽいものが!

http://stackoverflow.com/questions/11307404/use-database-such-as-sqlite-with-cocos2d-x

なるほど、これコピペでいけるか?と思ったら無理。

string dbPath = CCFileUtils::getWriteablePath();

こいつが動かん!

なんだなんだと調べたところこいつは

std::string dbPath = CCFileUtils::sharedFileUtils()->getWriteablePath();

これで動く。
ちなみにこのパスをCCLOGで得る場合は

CCLog("%s",dbPath.c_str());

とすれば見える。「.c_str()」を忘れずに。

ここでパスが取れてよっしゃー!ってなってたらそれいかが動かない・・・。

そうしてまた別の参考がないかなーって思ってたら、以下のページのコードがすんなり通りました。

http://4137613.blog.51cto.com/4127613/772518

このページのコード通りだと、writablePathが取ってないのでうまくいかないけど、読み書きはこれでばっちり行けます。

コピペのつぎはぎで、以下の様なソースになりました。


    sqlite3 *pDB = NULL;
    char* errMsg = NULL;
    std::string sqlstr;
    int result;
    std::string dbPath = CCFileUtils::sharedFileUtils()->getWriteablePath();
    dbPath.append("Settings.db");
    result = sqlite3_open(dbPath.c_str(),&pDB);
    if (result != SQLITE_OK){
        CCLOG("OPENING WRONG, %d, MSG:%s",result,errMsg);
    }else{
        CCLOG("OK! %d, %s",result,errMsg);
    }

    // 読み書きファイルパスの表示
    CCLog("%s",dbPath.c_str());

    result=sqlite3_exec( pDB, "create table MyTable_1( ID integer primary key autoincrement, name nvarchar(32) ) " , NULL, NULL, &errMsg );
    if( result != SQLITE_OK )
        CCLog( "失敗 :%d ,原因:%s\n" , result, errMsg );

    //insert
    sqlstr=" insert into MyTable_1( name ) values ( 'たかし' ) ";
    result = sqlite3_exec( pDB, sqlstr.c_str() , NULL, NULL, &errMsg );
    if(result != SQLITE_OK )
        CCLog( "失敗 :%d ,原因:%s\n" , result, errMsg );

    //insert
    sqlstr=" insert into MyTable_1( name ) values ( 'よしこ' ) ";
    result = sqlite3_exec( pDB, sqlstr.c_str() , NULL, NULL, &errMsg );
    if(result != SQLITE_OK )
        CCLog( "失敗 :%d ,原因:%s\n" , result, errMsg );

    //insert
    sqlstr=" insert into MyTable_1( name ) values ( 'かつみ' ) ";
    result = sqlite3_exec( pDB, sqlstr.c_str() , NULL, NULL, &errMsg );
    if(result != SQLITE_OK )
        CCLog( "失敗 :%d ,原因:%s\n" , result, errMsg );

    sqlite3_close(pDB); 

これらを、HelloWorldScene.cpp のinit内に入れればそのまんま動くはず。

insertやupdate、deleteなどの方法は、上の方に買いた中国のサイトにほとんど書いてある。
まだアンドロイドでの動作は確認できてないけど、取り急ぎiOSはこれで動作しました。

広告

From → cocos2d, cocos2d-x

コメントする

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。