とはいえ、忘れそうなのでメモ
そもそもSQLiteとは?
SQLite(エスキューライト)はMySQLやMariaDBやPostgreSQLと同じ関係データベース管理システム(RDBMS)である。
wikipedia
データを管理するもの。ゲームとか作るなら沢山データ作らなきゃいけないし、かなり多くのアプリで必要になってくるものです。
Androidでは標準でこのSQLiteがサポートされているので簡単に使える。
しかしこれまで、使い方調べるのを面倒がって配列にデータぶち込んでいました・・・;;
AndEngine使ってるから面倒なことになるんじゃないかなーと思ってたんですが、そんなことは全くなく、非常に簡単に利用できた。
参考サイト:blog lesson 01、naichilab - Android iOSアプリ開発メモ
①データベースのクラスを作る
SQLiteOpenHelperを継承したクラスを作ります。とりあえず作ったクラス名はDataBaseとしましょうか。
②初期データの投入
①で作ったクラスの中のonCreateメソッドの引数にSQLiteDatabase型のデータがあります。(初期インスタンス名はarg0かな?)
これにexecSQLを使ってデータを放り込みます
以下ソース
public class DataBase extends SQLiteOpenHelper {
private static int DB_VERSION = 1;
private static String DB_FILENAME= "towndefense.db";
public DataBase(Context context){
super(context,DB_FILENAME,null,DB_VERSION);
}
public DataBase(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d("LessonDb", "onCreate");
// ここでDBの作成、初期データの投入を行う
db.execSQL("CREATE TABLE Persons (" +
"Id INTEGER PRIMARY KEY AUTOINCREMENT," +
"Name TEXT )");
db.execSQL("INSERT INTO Persons(Name) VALUES('John');");
db.execSQL("INSERT INTO Persons(Name) VALUES('Tom');");
db.execSQL("INSERT INTO Persons(Name) VALUES('Taro');");
db.execSQL("INSERT INTO Persons(Name) VALUES('Mike');");
db.execSQL("INSERT INTO Persons(Name) VALUES('Bill');");
db.execSQL("INSERT INTO Persons(Name) VALUES('Bob');");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO 自動生成されたメソッド・スタブ
}
}
③データベースからデータを持ってくる
AndEngineを利用しているのでどこで読み込むのがベストなのかよくわかってないです。
とりあえず今回はMainActivityの中のonCreateSceneで、シーンをインスタンス化する前でやってみます。
読み込むときの云々はまだ知識不足なのでコピペ
SQLiteDatabase db = null;
try{
db = new DataBase(this).getReadableDatabase();
Cursor c = null;
try{
c = db.query(
"Persons",
new String[]{"Id","Name"},
null,
null,
null,
null,
"Id");
while( c.moveToNext() ){
Log.d("result","" + c.getInt(0) + " " + c.getString(1));
}
}catch(Exception e){
}finally{
if( c != null ){
c.close();
c = null;
}
}
}
catch(Exception e){
}finally{
if(db != null){
db.close();
db = null;
}
}
query(クエリ)ってのがデータをリクエストする命令みたいなもの。
詳しくはまだ調べてないけど、ここでカーソルクラス"c"にメモリの場所を入れて、あとは
cの中からInt型の0番目のデータとString型の1番目のデータを読み出してるんだと思う。
そしてLog.d使ってLogCatにデータを表示しているわけですね。
moveToNextとか普段使わないメソッドが結構あるけど、SQLiteはみんな使っているものなので調べればいくらでも情報が手に入ると思う。
そんなわけでAndEngineが非常に開発しやすいエンジンであることを再認識した今日なのでした

0 件のコメント:
コメントを投稿