Weitere ähnliche Inhalte Ähnlich wie Google Gears データベースの基礎 (20) Google Gears データベースの基礎2. Gearsデータベースの特徴
基本的に SQLite そのままの、本格的な RDB です。
JavaScript で SQL を発行することでアクセスします。
ローカルに大容量データを保存できます。(現在のところ容量無制限)
SQL の実行はネイティブコードなので、高速です。
トランザクションをサポートしています。
ドメインを基本としたセキュリティーモデルになっています。
ユーザーなどの概念はありません。
同期式 API なので、使い方が簡単です。コールバックはいりません!
全文検索もできます。(現在、日本語は未対応。 Gears 0.3 で対応?)
4. Gearsのインストールを確認
window.google.gears が定義されていれば Gears インストール済み。
インストールされていない場合は、 Gears のインストールページにリダイ
レクトする。
if(!window.google || !google.gears) {
// Gears がインストールされていなければ、インストールページにリダイレクト
location.href = "http://gears.google.com/?action=install&message=' +
escape('Google Gears をインストールしてください');
} else {
// 次に続く... インストールページに表示するメッセージ
}
7. テーブルの作成
execute メソッドで SQL を実行できます。
まずはテーブルがないと話にならないので、テーブルを作ります。
SQL の CREATE を発行してテーブルを作ります。
IF NOT EXISTS を指定して、毎回実行するのが楽です。
データ型は事実上 INTEGER, REAL, TEXT だけです。(BLOBは?)
他のデータ型はこれらのいずれかにマップされます。
“INTEGER PRIMARY KEY” のフィールドには自動で連番がふられます。
db.execute('CREATE TABLE IF NOT EXISTS tbl_name (' +
' id INTEGER PRIMARY KEY,' +
' title TEXT,' +
' url TEXT )');
8. SQLの実行(結果なし)
execute メソッドで SQL を実行します。(既出)
結果を返さないコマンドなら、単にメソッドを実行するだけです。
SQL 内の '?' は第2引数の配列の対応する要素で置換されます。
必要ならエスケープも自動で行われます。
可変パラメータは必ず上記の置換機能を利用しましょう。
(SQLインジェクション対策)
db.execute('INSERT INTO tbl_name (title, url) VALUES (?, ?)',
['WebOS Goodies',
'http://webos-goodies.jp']);
対応する文字列に置換されます
9. SQLの実行(結果あり)
execute メソッドで select 文などを実行すると、その結果を格納した
ResultSet オブジェクトが返ります。
以下のようにしてハッシュ配列に落としてしまうのが楽です。
ResultSet は、使い終わったら必ず close してください。
var qr = db.execute('select * from tbl_name');
var rows = [];
try {
while(qr.isValidRow()) { 行がなくなると false を返します
var cols = {};
for(var i = 0 ; i < qr.fieldsCount() ; ++i)
cols[qr.fieldName(i)] = qr.field(i);
rows[result.length] = cols;
qr.next();
} 次の行に移る
} finally {
qr.close(); 必ずクローズしてください
}
11. Tips...
Gears のデータベースファイルは SQLite と互換性があります。
SQLite 用のツールがそのまま利用可能です。
IE では API を call や apply で呼び出すことはできません。
該当する行が存在すれば UPDATE 、なければ INSERT として機能する
REPLACE という SQL コマンドがあります。
“select last_insert_rowid() from tbl_name” で最後に挿入した行の
rowid が取得できます。(プライマリキーが整数のとき、 rowid はプライマリ
キーのエイリアスです)
ほとんどの API は例外を投げる可能性があります。例外のハンドリングを
忘れないようにしてください。
トランザクションが開始できないと長時間ブロックする可能性があります。