在HTML5中,大大豐富了客戶端本地能夠存儲的內容,添加了不少功能來將本來必須保存在服務器上的數據轉爲保存在客戶端本地,從而大大提升了Web應用程序的性能,減輕了服務器端的負擔,使Web時代從新回到了「客戶端爲重,服務器爲輕」的時代。javascript
在這其中,一項很是重要的功能就是數據庫的本地存儲功能。在HTML5中內置了一個能夠經過SQL語言來訪問的數據庫。在HTML4中,數據庫只能放在服務器端,只能經過服務器來訪問數據庫,可是在HTML5中,能夠就像訪問本地文件那樣輕鬆的對內置的數據庫進行直接訪問。如今,像這種不須要存儲在服務器上的,被稱爲「SQLite」的文件型SQL數據庫已經獲得了很普遍的利用,因此HTML5中也採用了這種數據庫來做爲本地數據庫。html
三個核心方法html5
一、openDatabase:這個方法使用現有數據庫或建立新數據庫建立數據庫對象。java
二、transaction:這個方法容許咱們根據狀況控制事務提交或回滾。web
三、executeSql:這個方法用於執行真實的SQL查詢。sql
openDatabase方法打開一個已經存在的數據庫,若是數據庫不存在,它還能夠建立數據庫,建立並打開數據庫的語法以下:數據庫
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
五個參數:瀏覽器
數據庫名(mydb)服務器
版本號(1.0)函數
描述(Test DB)
數據庫大小(2*1024*1024)
建立回調
最後一個,即第五個參數 建立回調,在建立數據庫時會調用它,但即便沒有這個參數,同樣能夠在運行時建立數據庫。
執行查詢使用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)'); });
爲了向表中插入新記錄,咱們在上面的查詢語句中添加了一個簡單的SQL查詢,修改後的語句以下:
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, "foobar")'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "logmsg")'); });
在插入新紀錄時,咱們還能夠傳遞動態值,如:
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是外部變量
若是要讀取已經存在的記錄,咱們使用一個回調捕獲結果,代碼以下:
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, "foobar")'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "logmsg")'); }); db.transaction(function (tx) { tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { var len = results.rows.length, i; msg = "<p>Found rows: " + len + "</p>"; document.querySelector('#status').innerHTML += msg; for (i = 0; i < len; i++){ alert(results.rows.item(i).log ); } }, null); });
最後,一個完整的HTML5文檔中展示前面講述的內容,同時使用瀏覽器來解析這個HTML5文檔。
<!DOCTYPE HTML> <html> <head> <script type="text/javascript"> 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, "foobar")'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "logmsg")'); msg = '<p>Log message created and row inserted.</p>'; document.querySelector('#status').innerHTML = msg; }); db.transaction(function (tx) { tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { var len = results.rows.length, i; msg = "<p>Found rows: " + len + "</p>"; document.querySelector('#status').innerHTML += msg; for (i = 0; i < len; i++){ msg = "<p><b>" + results.rows.item(i).log + "</b></p>"; document.querySelector('#status').innerHTML += msg; } }, null); }); </script> </head> <body> <div id="status" name="status">Status Message</div> </body> </html>
原文出處: