WebSQLは非推奨となり、多くのWebブラウザでは機能が廃止されています。本記事で紹介しているコードも最新のWebブラウザでは動作しない場合があるためご注意下さい。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
var db;
function OpenDatabase() {
var dbsize = 1000;
var dbname = "myDB";
var dbversion = "1.0";
var dbdescription = "Test Database"
db = window.openDatabase(dbname, dbversion, dbdescription, dbsize);
if (db == null) {
alert("DBがnullです。");
}
}
function DropTable() {
db.transaction(
function (transact) {
transact.executeSql("DROP TABLE IF EXISTS product", [],
function () { out("DROP TABLE SUCCESS"); },
function () { out("DROP TABLE ERROR"); }
);
}
);
}
function CreateTable() {
db.transaction(
function (transact) {
transact.executeSql("CREATE TABLE product ( id, name, price )", [],
function () { out("CREATE TABLE SUCCESS"); },
function () { out("CREATE TABLE ERROR"); }
);
}
);
}
function InsertRecord() {
db.transaction(
function (transact) {
transact.executeSql("INSERT INTO product VALUES ( ?, ?, ? )", ['1', 'ぺんぎんクッキー', '280'],
function () { out("Insert Record SUCCESS"); },
function () { out("Insert Record ERROR"); }
);
transact.executeSql("INSERT INTO product VALUES ( ?, ?, ? )", ['2', 'しろくまアイス', '160'],
function () { out("Insert Record SUCCESS"); },
function () { out("Insert Record ERROR"); }
);
transact.executeSql("INSERT INTO product VALUES ( ?, ?, ? )", ['3', 'らくだキャラメル', '90'],
function () { out("Insert Record SUCCESS"); },
function () { out("Insert Record ERROR"); }
);
}
);
}
function SelectRecord() {
db.transaction(
function (transact) {
transact.executeSql("select * from product where id = ?", ['2'],
function (rt, rs) {
for (var i = 0; i < rs.rows.length; i++) {
var row = rs.rows.item(i);
result_out(row.id + ", " + row.name + ", " + row.price);
}
},
function () { out("Insert Record ERROR"); }
);
}
);
}
function result_out(message) {
document.getElementById("result").innerHTML += message + "<br>";
}
function out(message) {
document.getElementById("message").innerHTML += message + "<br>";
}
</script>
</head>
<body onload="">
<a href="javascript:void(0);" onclick="OpenDatabase();">Open Databse</a><br />
<a href="javascript:void(0);" onclick="DropTable();">Drop Table</a><br />
<a href="javascript:void(0);" onclick="CreateTable();">Create Table</a><br />
<a href="javascript:void(0);" onclick="InsertRecord();">Insert Record</a><br />
<a href="javascript:void(0);" onclick="SelectRecord();">Select Record</a><br />
<hr />
<div id="result"></div>
<hr />
<div id="message"></div>
</body>
</html>
openDatabase()
関数を利用します。データベースが開けると、データベースオブジェクトが戻り値として返ります。以後のSQL実行などのデータベースの操作は、このデータベースオブジェクトを利用します。 function OpenDatabase() {
var dbsize = 1000;
var dbname = "myDB";
var dbversion = "1.0";
var dbdescription = "Test Database"
db = openDatabase(dbname, dbversion, dbdescription, dbsize);
if (db == null) {
alert("DBがnullです。");
}
}
openDatabase(データベース名, データベースのバージョン, 説明, データベースのサイズ);
function CreateTable() {
db.transaction(
function (transact) {
transact.executeSql("CREATE TABLE product ( id, name, price )", [],
function () { out("CREATE TABLE SUCCESS"); },
function () { out("CREATE TABLE ERROR"); }
);
}
);
}
(トランザクションオブジェクト).executeSql("実行するSQL文", [(パラメーター値)],
SQL文の実行に成功した場合のコールバック関数, SQL文の実行に失敗した場合のコールバック関数)
transact.executeSql("INSERT INTO product VALUES ( ?, ?, ? )", ['1', 'ぺんぎんクッキー', '280'],null,null)
function InsertRecord() {
db.transaction(
function (transact) {
transact.executeSql("INSERT INTO product VALUES ( ?, ?, ? )", ['1', 'ぺんぎんクッキー', '280'],
function () { out("Insert Record SUCCESS"); },
function () { out("Insert Record ERROR"); }
);
transact.executeSql("INSERT INTO product VALUES ( ?, ?, ? )", ['2', 'しろくまアイス', '160'],
function () { out("Insert Record SUCCESS"); },
function () { out("Insert Record ERROR"); }
);
transact.executeSql("INSERT INTO product VALUES ( ?, ?, ? )", ['3', 'らくだキャラメル', '90'],
function () { out("Insert Record SUCCESS"); },
function () { out("Insert Record ERROR"); }
);
}
);
}
function SelectRecord() {
db.transaction(
function (transact) {
transact.executeSql("select * from product where id = ?", ['2'],
function (rt, rs) {
for (var i = 0; i < rs.rows.length; i++) {
var row = rs.rows.item(i);
result_out(row.id + ", " + row.name + ", " + row.price);
}
},
function () { out("Insert Record ERROR"); }
);
}
);
}
rs.rows
に検索結果がセットされています。検索結果の件数を取得する場合は rs.rows.length
で取得できます。 function (rt, rs) {
for (var i = 0; i < rs.rows.length; i++) {
var row = rs.rows.item(i);
result_out(row.id + ", " + row.name + ", " + row.price);
}
}
function result_out(message) {
document.getElementById("result").innerHTML += message + "<br>";
}