亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

HTML5 Web SQL 數(shù)據(jù)庫

HTML5 Web SQL 數(shù)據(jù)庫

Web SQL 數(shù)據(jù)庫 API 并不是 HTML5 規(guī)范的一部分,但是它是一個獨立的規(guī)范,引入了一組使用 SQL 操作客戶端數(shù)據(jù)庫的 APIs。

如果你是一個 Web 后端程序員,應(yīng)該很容易理解 SQL 的操作。

你也可以參考我們的?SQL 教程,了解更多數(shù)據(jù)庫操作知識。

Web SQL 數(shù)據(jù)庫可以在最新版的 Safari, Chrome 和 Opera 瀏覽器中工作.

核心方法

以下是規(guī)范中定義的三個核心方法:

openDatabase:這個方法使用現(xiàn)有的數(shù)據(jù)庫或者新建的數(shù)據(jù)庫創(chuàng)建一個數(shù)據(jù)庫對象。

transaction:這個方法讓我們能夠控制一個事務(wù),以及基于這種情況執(zhí)行提交或者回滾。

executeSql:這個方法用于執(zhí)行實際的 SQL 查詢。

開啟數(shù)據(jù)庫

如果數(shù)據(jù)庫已經(jīng)存在,openDatabase?方法負(fù)責(zé)開啟數(shù)據(jù)庫,如果不存在,這個方法會創(chuàng)建它。

使用下面的代碼可以創(chuàng)建并開啟一個數(shù)據(jù)庫:

var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);

上面的方法接受下列五個參數(shù):

數(shù)據(jù)庫名稱

版本號

描述文本

數(shù)據(jù)庫大小

創(chuàng)建回調(diào)

最后也是第五個參數(shù),創(chuàng)建回調(diào)會在創(chuàng)建數(shù)據(jù)庫后被調(diào)用。然而,即使沒有這個特性(功能),運行時仍然會創(chuàng)建數(shù)據(jù)庫以及正確的版本。

執(zhí)行查詢

執(zhí)行查詢需要使用 database.transaction() 函數(shù)。這個函數(shù)需要一個參數(shù),它是一個負(fù)責(zé)實際執(zhí)行查詢的函數(shù),如下所示:

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)');
});

上面的查詢語句會在 'mydb' 數(shù)據(jù)庫中創(chuàng)建一個叫做的 LOGS 的表。

插入操作

為了在表中創(chuàng)建條目,我們在上面的例子中加入簡單的 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")');
});

創(chuàng)建條目時還可以傳遞如下所示的動態(tài)值:

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 是外部變量,executeSql 會映射數(shù)組參數(shù)中的每個條目給 "?"。

讀取操作

要讀取已經(jīng)存在的記錄,我們可以使用回調(diào)來捕獲結(jié)果,如下所示:

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);
});

最終示例

<!DOCTYPE HTML>
<html>
   <head>
      <meta charset="UTF-8">
      <title>web SQL</title> 
      <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, "")');
            tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "ipnx.cn")');
            msg = '<p>數(shù)據(jù)表已創(chuàng)建,且插入了兩條數(shù)據(jù)。</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>查詢記錄條數(shù): " + 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">狀態(tài)信息</div>
   </body>
</html>

刪除記錄

刪除記錄使用的格式如下:

db.transaction(function (tx) {
    tx.executeSql('DELETE FROM LOGS  WHERE id=1');
});

刪除指定的數(shù)據(jù)id也可以是動態(tài)的:

db.transaction(function(tx) {
? ?tx.executeSql('DELETE FROM LOGS WHERE id=?', [id]);
});

更新記錄

更新記錄使用的格式如下:

db.transaction(function (tx) {
    tx.executeSql('UPDATE LOGS SET log=\'www.w3cschool.cc\' WHERE id=2');
});

更新指定的數(shù)據(jù)id也可以是動態(tài)的:

db.transaction(function(tx) {    tx.executeSql('UPDATE LOGS SET log=\'www.w3cschool.cc\' WHERE id=?', [id]);});


繼續(xù)學(xué)習(xí)
||
<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title>web SQL</title>  <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, "php中文網(wǎng)")'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "ipnx.cn")'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (3, "www.ask.php.cn")'); msg = '<p>數(shù)據(jù)表已創(chuàng)建,且插入了兩條數(shù)據(jù)。</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>查詢記錄條數(shù): " + 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">狀態(tài)信息</div> </body> </html>
提交重置代碼