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プログラミング入門」に戻る