libro
www.tuyano.com
JavaScriptによるHTML5プログラミング入門

Web SQL Database APIによるデータベース・アクセス (4/6)

作成:2010-07-17 17:26
更新:2010-07-17 17:28

■データベースアクセスのスクリプトを作成する

さて、けっこう大変なことになってしまいました。下のリストが、今回作成するスクリプトです。思った以上にややこしそうですね。おじけづく前に、先ほどの「データベースアクセスの基本」をよく思い出してください。

では、ここで用意されている処理についてざっと整理しておきましょう。

1.下準備(1)
var datatable = null;
var db = openDatabase('MyData', '', 'My Database', 102400);
スクリプトの最初に、変数datatabledbを用意してあります。datatableは、<table>タグのエレメントを保管するものです。これは後でやります。dbは、openDatabase関数でデータベースアクセスのオブジェクトを作成して設定します。今回は、MyDataというデータベースをつくって利用します。

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を呼び出してデータを更新します。


――全体の流れが把握できましたか。詳しいことはこの後にして、とりあえず実際に動かしてデータを色々と追加してみましょう。

※プログラムリストが表示されない場合

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