Web SQL Database APIによるデータベース・アクセス (4/6)
作成:2010-07-17 17:26
更新:2010-07-17 17:28
更新:2010-07-17 17:28
■データベースアクセスのスクリプトを作成する
さて、けっこう大変なことになってしまいました。下のリストが、今回作成するスクリプトです。思った以上にややこしそうですね。おじけづく前に、先ほどの「データベースアクセスの基本」をよく思い出してください。
では、ここで用意されている処理についてざっと整理しておきましょう。
1.下準備(1)
2.下準備(2)
下準備は、もう1つあります。init関数に用意した処理です。これは、<body>のonloadに設定されていました。datatableへのエレメント設定は、<body>のロードが完了しないと取得できないため、init内で実行するようにしてあります。その後、showAllDataでデータの表示をしています。
3.表示データの消去
removeAllDataは、showAllData内で必要となる処理です。これは、<table>内に組み込まれている全要素を削除し、ヘッダーだけの状態に戻すものです。こうしてデータをすべて消してから、データベースのデータを組み込み直します。
4.データの表示
showDataは、引数に渡されたデータを<tr>タグのエレメントとして用意し、<table>に追加する処理です。
5.全データの表示
showAllDataは、transactionを使ってexecuteSqlを実行し、全データを取得するものです。データが得られたら、removeAllDataでテーブルを初期化し、繰り返し処理で1つ1つデータを取り出してはshowDataを呼び出してテーブルに追加していきます。
6.データの追加
addDataは、saveData内から呼び出されます。transactionを使ってexecuteSqlを実行し、引数で渡された値をデータベースに保管します。
7.データの保存
saveDataは、入力された値を取得後、データベースにデータを保管する「addData」関数を呼び出して実行しています。その後、showAllDataを呼び出してデータを更新します。
――全体の流れが把握できましたか。詳しいことはこの後にして、とりあえず実際に動かしてデータを色々と追加してみましょう。
では、ここで用意されている処理についてざっと整理しておきましょう。
1.下準備(1)
var datatable = null;スクリプトの最初に、変数datatableとdbを用意してあります。datatableは、<table>タグのエレメントを保管するものです。これは後でやります。dbは、openDatabase関数でデータベースアクセスのオブジェクトを作成して設定します。今回は、MyDataというデータベースをつくって利用します。
var db = openDatabase('MyData', '', 'My Database', 102400);
2.下準備(2)
下準備は、もう1つあります。init関数に用意した処理です。これは、<body>のonloadに設定されていました。datatableへのエレメント設定は、<body>のロードが完了しないと取得できないため、init内で実行するようにしてあります。その後、showAllDataでデータの表示をしています。
3.表示データの消去
removeAllDataは、showAllData内で必要となる処理です。これは、<table>内に組み込まれている全要素を削除し、ヘッダーだけの状態に戻すものです。こうしてデータをすべて消してから、データベースのデータを組み込み直します。
4.データの表示
showDataは、引数に渡されたデータを<tr>タグのエレメントとして用意し、<table>に追加する処理です。
5.全データの表示
showAllDataは、transactionを使ってexecuteSqlを実行し、全データを取得するものです。データが得られたら、removeAllDataでテーブルを初期化し、繰り返し処理で1つ1つデータを取り出してはshowDataを呼び出してテーブルに追加していきます。
6.データの追加
addDataは、saveData内から呼び出されます。transactionを使ってexecuteSqlを実行し、引数で渡された値をデータベースに保管します。
7.データの保存
saveDataは、入力された値を取得後、データベースにデータを保管する「addData」関数を呼び出して実行しています。その後、showAllDataを呼び出してデータを更新します。
――全体の流れが把握できましたか。詳しいことはこの後にして、とりあえず実際に動かしてデータを色々と追加してみましょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
var datatable = null; var db = openDatabase('MyData', '', 'My Database', 102400); function init(){ datatable = document.getElementById("datatable"); showAllData(); } function removeAllData(){ for (var i =datatable.childNodes.length-1; i>=0; i--) { datatable.removeChild(datatable.childNodes[i]); } var tr = document.createElement('tr'); var th1 = document.createElement('th'); var th2 = document.createElement('th'); var th3 = document.createElement('th'); th1.innerHTML = '名前'; th2.innerHTML = 'メモ'; th3.innerHTML = '日時'; tr.appendChild(th1); tr.appendChild(th2); tr.appendChild(th3); datatable.appendChild(tr); } function showData(row) { var tr = document.createElement('tr'); var td1 = document.createElement('td'); td1.innerHTML = row.name; var td2 = document.createElement('td'); td2.innerHTML = row.message; var td3 = document.createElement('td'); var t = new Date(); t.setTime(row.time); td3.innerHTML = t.toLocaleDateString() + " " + t.toLocaleTimeString(); tr.appendChild(td1); tr.appendChild(td2); tr.appendChild(td3); datatable.appendChild(tr); } function showAllData() { db.transaction(function(tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS MsgData(name TEXT, message TEXT, time INTEGER)',[]); tx.executeSql('SELECT * FROM MsgData', [], function(tx, rs) { removeAllData(); for(var i = 0; i < rs.rows.length; i++) { showData(rs.rows.item(i)); } }); }); } function addData(name, message, time) { db.transaction(function(tx) { tx.executeSql('INSERT INTO MsgData VALUES(?, ?, ?)', [name, message, time], function(tx, rs) { alert("SUCCESS!!"); }, function(tx, error) { alert(source + "::" + message); }); } ); } function saveData(){ var name = document.getElementById('name').value; var memo = document.getElementById('memo').value; var time = new Date().getTime(); addData(name,memo,time); showAllData(); }
※関連コンテンツ
「JavaScriptによるHTML5プログラミング入門」に戻る