2012年11月5日月曜日

TitaniumでDB操作(SQLite)

  • このエントリーをはてなブックマークに追加

-------------------------------------------------------------------------------
クエリビルダー(sqliter)作りました
これよりも簡単にSQLiteを扱うために、クエリビルダー作りました。
こちらの記事に書いてあるのでよかったらどうぞ。
-------------------------------------------------------------------------------

Titaniumでアプリを作っている際に、たまにデータを格納する必要がある。
簡単なテキストを入れるとかそういった類いのものであるならば、
Ti.App.Propertiesを使えば大体の処理を行う事は可能なんだけれども、
例えばツイートデータを入れるだとか、常に変わるようなデータを入れるだとかのときには、
Ti.App.Propertiesを使っているとデータを消去して入れ直すといった面倒な作業が発生する。

それにデータをなるべく蓄積しておきたいとかもあるだろうしってことでSQLiteを使う事にした。

SQLiteを使うにはTi.Database.open("dbname")といった感じで始まる。
けどアプリ内に入れるデータベースなんて1つのわけだし、
ましてやopenとかいくつもの処理で毎回書くのが面倒なのでライブラリを作ってみた。

ダウンロードはこちらから

使い方は下記のような感じ。

var db = require("lib/db").db();

Ti.API.info(db.fetch("SELECT * FROM userdata"));
//結果はobjectで返ってくる

var Iresult = db.query("INSERT INTO userdata (id,username) VALUES(1,'test')");
if(Iresult) Ti.API.info("insert success")

var Uresult = db.query("UPDATE userdata SET username = 'myname' WHERE id = 1");
if(Uresult) Ti.API.info("update success");
■初期化について
require("lib/db").db()したときに初期化をするようにした。(db.js:24〜27行目)
checkTableExists("tableName")というメソッドでテーブルが存在しなければ、
initTableの中から先ほど指定したtableNameに該当するテーブルを作成。

■selectについて
selectした際に全てのデータをobjectで返すようにした。
Titaniumでは基本的にobject使っていくわけだし、1行だけ取り出すとかっていう処理も面倒だし。
それに条件に一致しなくてもobjectの中身が空で返ってくることから、ちゃんと後の条件分岐も可能。

■insert、updateについて
基本的にinsertしたとかupdateしたっていうのは、成功したかどうかの結果が欲しいと思う。
なのでrowsAffectedを使ってどの行数影響したかというのを取得して返すようにした。


とまぁざっくりとオールマイティーに使えるだろうというものを作ってみた。

Adsense