我有一個使用AngularJS,JS,Phonegap/Cordova,Monaca和Onsen UI開發的跨平臺應用程序。無法在for循環中使用JavaScript創建SQLite表
我已經在應用程序中實現了一個SQLite數據庫來存儲各種數據,以確保應用程序可以離線使用。我已經完成了一些簡單的測試,並且這些都是按照預期工作的。
我現在嘗試創建我需要在應用程序中的所有表(共28)在我的應用程序第一視圖小號onDeviceReady()功能。爲此我創建了一個對象數組,我將逐個傳遞給SQLite CREATE語句,如下所示。
設置表中的值
// Form values
var formValues = [{
tablename: "table_1",
id: "id_1",
desc: "desc_1",
dataType: "TEXT"
}, {
tablename: "table_2",
id: "id_2",
desc: "desc_2",
dataType: "TEXT"
}, {
...
...
...
...
}, {
tablename: "table_28",
id: "id_28",
desc: "desc_28",
dataType: "TEXT"
}];
創建表
function onDeviceReady() {
for (var i = 0; i < formValues.length; i++) {
var createFormValues = 'CREATE TABLE IF NOT EXISTS ' + formValues[i].tablename + ' (' + formValues[i].id + ' INTEGER, ' + formValues[i].desc + ' ' + formValues[i].dataType + ')';
alert("SQL: " + createFormValues +
"\n\nForm: " + formValues +
"\nName: " + formValues[i].tablename +
"\nID: " + formValues[i].id +
"\nDesc: " + formValues[i].desc +
"\nType: " + formValues[i].dataType);
db.transaction(function (tx) { tx.executeSql(createFormValues); });
}
};
當我運行上面的代碼,警報顯示,所有包括SQL語句中的信息OK 。但是,當我查詢for()循環後面的每個表時,它表示沒有創建表最後一個表除外。
然後,我嘗試以下哪個DOES創建所有的表,但顯然效率低下和管理。
調用函數
createFormTables("table_1", "id_1", "desc_1", "TEXT");
createFormTables("table_2", "id_2", "desc_2", "TEXT");
createFormTables("...", "...", "...", "...");
createFormTables("table_28", "id_28", "desc_28", "TEXT");
執行功能
createFormTables: function (tableName, id, description, dataType) {
var sql = 'CREATE TABLE IF NOT EXISTS ' + tableName + ' (' + id + ' INTEGER, ' + description + ' ' + dataType + ')';
alert("Create Form Field SQL: " + sql);
db.transaction(function (tx) { tx.executeSql(sql); });
},
我知道SQLite的語句是異步執行的,但我不明白爲什麼會在第二個創建表例如,而不是第一個?如何使用第一個示例創建表?我可以設置一個$ timeout來執行每個INSERT聲明,但這似乎沒有必要,並且會導致延遲。