HTML5 Web SQL データベース
Web SQL データベース API は HTML5 の仕様の一部ではありませんが、独立した仕様であり、SQL を使用してクライアントデータベースを操作する一連の API を導入しています。
あなたが Web バックエンドプログラマーであれば、SQL の操作を理解するのは簡単でしょう。さらにデータベース操作に関する詳細については、私たちの SQL チュートリアルを参照することもできます。
Web SQL データベースは最新の Safari、Chrome、および Opera ブラウザで動作します。
コアメソッド
以下は仕様で定義されている三つのコアメソッドです:
- openDatabase:このメソッドは既存のデータベースを使用するか新しいデータベースを作成してデータベースオブジェクトを生成します。
- transaction:このメソッドはトランザクションを制御できるようにし、この状況に基づいてコミットまたはロールバックを実行します。
- executeSql:このメソッドは実際の SQL クエリを実行するために使用されます。
データベースを開く
openDatabase() メソッドを使用して既存のデータベースを開くか、データベースが存在しない場合は新しいデータベースを作成できます。以下のコードをご覧ください:
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
openDatabase() メソッドの五つのパラメータの説明:
パラメータ | 説明 |
---|---|
データベース名称 | データベースの名前を指定します。 |
バージョン号 | データベースのバージョンを指定します。 |
説明テキスト | データベースの説明を入力します。 |
データベースサイズ | データベースのサイズを指定します(バイト単位)。 |
作成コールバック | データベースが作成された後に呼び出されるコールバック関数。 |
クエリ操作を実行する
データベースで操作を実行するには、database.transaction() 関数を使用します:
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)');
});
上記のステートメントを実行すると、'mydb' データベース内に LOGS という名前のテーブルが作成されます。
データの挿入
前述のテーブル作成ステートメントを実行した後、いくつかのデータを挿入できます:
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)');
tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "IT教程")');
tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "www.japanitguide.com")');
});
または動的な値を使用してデータを挿入することもできます:
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)');
tx.executeSql('INSERT INTO LOGS (id,log) VALUES (?, ?)', [e_id, e_log]);
});
ここで例示されている e_id と e_log は外部変数であり、executeSql は配列のパラメータ内の各エントリを "?" にマッピングします。
データの読み取り
以下の例は、データベースに既に存在するデータをどのように読み取るかを示します:
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024); db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "IT教程")'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "www.japanitguide.com")'); }); db.transaction(function (tx) { tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { var len = results.rows.length, i; msg = "クエリ結果のレコード数: " + len
; document.querySelector('#status').innerHTML += msg; for (i = 0; i < len; i++) { alert(results.rows.item(i).log); } }, null); });
完全な例
以下は完全な例です:
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024); var msg; db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "IT教程")'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "www.japanitguide.com")'); msg = '
テーブルが作成され、2 つのレコードが挿入されました。'; document.querySelector('#status').innerHTML = msg; }); db.transaction(function (tx) { tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { var len = results.rows.length, i; msg = "
クエリ結果のレコード数: " + len; document.querySelector('#status').innerHTML += msg; for (i = 0; i < len; i++) { msg = "
" + results.rows.item(i).log; document.querySelector('#status').innerHTML += msg; } }, null); });
レコードの削除
レコードを削除するには、以下のフォーマットが使用されます:
db.transaction(function (tx) {
tx.executeSql('DELETE FROM LOGS WHERE id=1');
});
指定したデータの id も動的にすることができます:
db.transaction(function(tx) {
tx.executeSql('DELETE FROM LOGS WHERE id=?', [id]);
});
レコードの更新
レコードを更新するには、以下のフォーマットが使用されます:
db.transaction(function (tx) {
tx.executeSql('UPDATE LOGS SET log=\'www.w3cschool.cc\' WHERE id=2');
});
指定したデータの id も動的にすることができます:
db.transaction(function(tx) {
tx.executeSql('UPDATE LOGS SET log=\'www.w3cschool.cc\' WHERE id=?', [id]);
});
完全な例 2
以下は別の完全な例です:
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
var msg;
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)');
tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "IT教程")');
tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "www.japanitguide.com")');
msg = '
テーブルが作成され、2 つのレコードが挿入されました。
'; document.querySelector('#status').innerHTML = msg; }); db.transaction(function (tx) { tx.executeSql('DELETE FROM LOGS WHERE id=1'); msg = '
id が1 の記録を削除しました。'; document.querySelector('#status').innerHTML = msg; }); db.transaction(function (tx) { tx.executeSql('UPDATE LOGS SET log=\'www.w3cschool.cc\' WHERE id=2'); msg = '
id が2 の記録を更新しました。'; document.querySelector('#status').innerHTML = msg; }); db.transaction(function (tx) { tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { var len = results.rows.length, i; msg = "
クエリ結果のレコード数: " + len; document.querySelector('#status').innerHTML += msg; for (i = 0; i < len; i++) { msg = "
" + results.rows.item(i).log; document.querySelector('#status').innerHTML += msg; } }, null); });
関連する Q&A
Q1: Web SQL データベースはすべてのブラウザで使用できますか?
A1: いいえ、Web SQL データベースは最新の Safari、Chrome、および Opera ブラウザでのみ動作します。他のブラウザ、特に Firefox と Internet Explorer ではサポートされていません。
Q2: Web SQL データベースのデータはどこに保存されますか?
A2: データはブラウザのローカルストレージに保存されます。これにより、アプリケーションのデータがブラウザに閉じられ、サーバーに依存しません。
Q3: Web SQL データベースは安全ですか?
A3: Web SQL データベースはクライアント側のデータベース技術であるため、サーバー側のデータベースと比べてセキュリティ面でのリスクが高いです。重要なデータの保存には注意が必要です。