Транзакции с базой данных HTML5 - PullRequest
3 голосов
/ 03 июня 2010

меня интересует пример 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]);
      }
    });
  });
}

имеет таблицу создания перед 'main' 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");
            });
        }); 
    })
}

1 Ответ

2 голосов
/ 03 июня 2010

Вы решаете эту проблему, используя changeVersion. API поддерживает управление версиями базы данных, поэтому вы можете применять изменения схемы во время обновлений или в вашем случае ... при установке.

В документации есть несколько примеров :

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 или не существует, он вызывает то закрытие, которое выполняет оператор <code>CREATE TABLE.

При повторном посещении страницы, если пользователь не очистил базу данных ... она будет уже в версии 1.0, поэтому changeVersion просто ничего не сделает вместо повторного запуска CREATE TABLE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...