database - HTML5 数据库事务

标签 database html

我想知道这个例子W3C Offline Web Apps例子

function renderNotes() {
  db.transaction(function(tx) {
    tx.executeSql('CREATE TABLE IF NOT EXISTS Notes(title TEXT, body TEXT)', 
      []);
    tx.executeSql(‘SELECT * FROM Notes’, [], function(tx, rs) {
      for(var i = 0; i < rs.rows.length; i++) {
        renderNote(rs.rows[i]);
      }
    });
  });
}

在“主”executeSql() 之前创建表。如果我做类似的事情会更好吗

$(function() {
    // create table 1st
    db.transaction(function(tx) {
        tx.executeSql('CREATE TABLE IF NOT EXISTS Notes(title TEXT, body TEXT)', 
          []);
    });

    // when i execute say to select/modify data, i just do the actual action
    db.transaction(function(tx) {
        tx.executeSql(‘SELECT * FROM Notes’, [], function(tx, rs) {
            ...
        }
    });

    db.transaction(function(tx) {
        tx.executeSql(‘INSERT ...’, [], function(tx, rs) {
            ...
        }
    });
})

我在想我不需要一直重复 CREATE IF NOT EXISTS 对吗?

更新

function initDatabase() {
    notes = openDatabase("todolist", "1.0", "To-Do List", 1*1024*1024, function (notes) {
        notes.changeVersion("", "1.0", function(tx) {
            tx.executeSql("CREATE TABLE todolist (id INTEGER, task TEXT)", [], function(tx, rs) {
                alert("Table created");
            });
        }); 
    })
}

最佳答案

您可以使用 changeVersion 解决这个问题。 API 支持数据库版本控制,因此您可以在升级期间应用架构更改,或者在您的情况下..安装。

documentation 中有一些示例:

function prepareDatabase(ready, error) {
  return openDatabase('documents', '1.0', 'Offline document storage', 5*1024*1024, function (db) {
    db.changeVersion('', '1.0', function (t) {
      t.executeSql('CREATE TABLE docids (id, name)');
    }, error);
  });
}

在那个例子中,他们调用了 prepareDatabase,它打开了一个到数据库的连接,但是如果版本是 < 1.0 或不存在,它会调用那个执行 CREATE TABLE 的闭包 语句。

当页面被重新访问时,假设用户没有清除数据库。它已经是 1.0 版本了,所以 changeVersion 将什么都不做,而不是运行 CREATE TABLE 再次。

关于database - HTML5 数据库事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2966256/

相关文章:

database - 当实际数据发生变化时,结果缓存数据会发生什么变化?

sql - 如何从表列中删除唯一约束?

php - 在我的 Laravel 应用程序中,数据库关系名称及其最佳实践

html - 带间距的CSS垂直书写错误

javascript - 如何在同一页面上验证此表单?

mongodb - 什么是多态数据? NoSQL 数据库

database - 数据库术语之间的差异

javascript - 在为 var 获取数据时我可以忽略吗?

jQuery mmenu Windows Phone 问题(IE Mobile)

javascript - 在网络上编写数学证明的最佳方法是什么?