我想知道这个例子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/