2011年01月19日

Titanium Desktop で データベース を使う(PHP もあるでよ)

前置きなし。
1.とりあえず DB を使ってみる。
まずは 公式ドキュメント を参考に、データベースの作成、テーブルの作成、データの挿入をしてみます。
(Application 名は AppName, id は AppID, アプリ作成に使用するディレクトリを AppDir とします。)

AppDir/Resources/index.html

script タグの中にこんな感じで記述します。これを動かしてみると…
スクショ
と、こんな感じで DB を操作できているのは分かるのですが、一体どこで何が起きているのでしょう?いろいろ見ていくと
~/Library/Application Support/Titanium/appdata/AppID/AppID_0/0000000000000001.db
というファイルが出来ていて(Mac の場合)、中身をターミナルから覗いてみると
sqlite> select * from test;
1|hoge
のようにテーブルの作成→データの挿入までが出来ていることが分かります。

無事に DB を使うことが出来ていますが、初期値を入れた状態でアプリケーションを配布したい場合に不便です。そういった場合には Titanium.Database.openFile() を使います。
下準備として YourApps/Resources/ にターミナルから testdb を作り、
sqlite> create table test (id INT, name TEXT);
をしておきます。
AppDir/Resources/index.html


実行結果
スクショ
どうやらデータの挿入が出来ているようです。それではデータベースのファイルを確認してみましょう。
$ sqlite3 AppDir/Resources/testdb
sqlite> select * from test;
をやってみても何も返ってきません。実際のファイルは
AppDir/dist/osx/AppName/Contents/Resources/testdb にあるので、こちらで
sqlite> select * from test;
2|test
このように中身を確認できます。

2. PHP から SQLite を使ってみる
とりあえず PHP マニュアル通りに書いてみましょうか。
PHP: sqlite_open - Manual
をほぼコピペして

AppDir/Resources/index.php
<?php
if ($db = sqlite_open('testdb2', 0666, $sqliteerror)) {
    sqlite_query($db, 'CREATE TABLE foo (bar varchar(10))');
    sqlite_query($db, "INSERT INTO foo VALUES ('fnord')");
    $result = sqlite_query($db, 'select bar from foo');
    var_dump(sqlite_fetch_array($result));
} else {
    die($sqliteerror);
}

で、実行。
スクショ
「あら奥さん、出来ちゃいました。」ぐらいの勢いですんなり行けました。

じゃあちょっと趣向を替えて、 SQLite3 クラス を使ってみましょう。こちら のコードをコピペして
AppDir/Resources/index.php
<?php
$db = new SQLite3('test3.db');

$db->exec('CREATE TABLE foo (id INTEGER, bar STRING)');
$db->exec("INSERT INTO foo (id, bar) VALUES (1, 'This is a test')");

$stmt = $db->prepare('SELECT bar FROM foo WHERE id=:id');
$stmt->bindValue(':id', 1, SQLITE3_INTEGER);

$result = $stmt->execute();
var_dump($result->fetchArray());

スクショ
余裕じゃないですか。こうなったらもう少し調子にのって…

3. じゃあ PEAR を使ってみよう…と言いたいところですが

前回 の記事で Titanium Desktop で PEAR を使ってみました。実はここ1年ぐらい PEAR に触ってなかったのでちょっと自信ないのですが、PEAR::DB は「新規で使うな」という話なので PEAR::MDB2 を使うことになります。しかし MDB2 の SQLite ドライバが SQLite2 用 らしいんですよね。ということで今回は見送り。MDB2_Driver_sqlite3 を自力で書くという手もありますが、それはそれでまた別のお話ということで。

/* まとめ */
API
・Titanium.Database.open を使うとデフォルトで設定された場所に DB ファイルが作成される。
・Titanium.Database.openFile を使うと自分で決めた DB ファイルを使用出来るので、あらかじめデータを挿入しておくことも可能。

PHP
・SQLite 関数を使用して API を介さずに DB を操作できる。
・同様にSQLite3 クラスも使用可能。

といったところでしょうか。

/* 追記 */
DB を使っていてコードを書きなおして再パッケージした場合に、パッケージ中の DB ファイルが再パッケージ前のまま残ってエラーが出ることがあります(というか残る)。DB ファイル名を書き換える、もしくは大胆に前回のパッケージを削除してみてもいいかもしれません。


ラベル:titanium PHP sqlite
posted by tbsmcd at 00:00| Comment(1) | TrackBack(0) | 技術 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント

私はあなたが好きという記事だった。それは偉大にして有用な私のために!
Posted by エルメスバッグ at 2012年03月26日 10:59
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。