我的主要目標是在android/IOS的sqlite中將數據庫中的以下結構保存在數據庫中。 相應的表格將由編譯註意的外鍵組成。在phonegap中嵌套的sqlite事務
var tempData = [{
name : "foo",
values : [{
child : "foofoo",
value : [1, 2, 3]
}, {
child : "foofaa",
value : [5, 6, 7]
}
]
}, {
name : "bar",
values : [{
child : "barbar",
values : [11, 22, 33]
}, {
child : "barbala",
values : [44, 55, 66]
}
]
}, {
name : "baz",
values : [{
child : "bazbaz",
values : [444, 333, 222]
}, {
child : "bazbaazar",
values : [999, 888, 777]
}
]
}];
我寫了下面的代碼片斷來堅持上述結構。 這是用嵌套事務處理的傳統方法嗎? 或者我必須遵循一些標準?
下面的代碼工作正常,除了執行的順序不能保證。我在輸出中看到一些隨機行爲。我如何保證嵌套事務的同步行爲。我已經颳了很多網站,但無法找到一個坦率的解決方案。請幫忙
db.transaction(setupTable, dbErrorHandler, getEntries);
function setupTable(tx) {
doLog("before execute sql...");
tx.executeSql('CREATE TABLE IF NOT EXISTS mainTest(mainKey INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL)');
tx.executeSql('CREATE TABLE IF NOT EXISTS child(PKEY INTEGER PRIMARY KEY AUTOINCREMENT,parentKey INTEGER,children TEXT NOT NULL,FOREIGN KEY(parentKey) REFERENCES mainTest(mainKey))');
tx.executeSql('CREATE TABLE IF NOT EXISTS secondChild(SCKEY INTEGER PRIMARY KEY AUTOINCREMENT,spkey INTEGER,sales INTEGER,FOREIGN KEY(spkey) REFERENCES child(PKEY))');
doLog("after execute sql...");}
function getEntries(tx) {
//doLog("get entries");
/*dbShell.transaction(function(tx) {
tx.executeSql("select id, title, body, updated from notes order by updated desc",[],renderEntries,dbErrorHandler);
}, dbErrorHandler);*/
doLog("get entries");
db.transaction(function (tx) {
_.each(tempData, function (item) {
name = item.name;
tx.executeSql('INSERT INTO mainTest (name) VALUES("' + name + '")', [], function (tx, result) {
doLog("in child insert" + item.values);
doLog("in child insert" + JSON.stringify(tempData));
_.each(item.values, function (item) {
doLog("in " + item.child);
tx.executeSql('INSERT INTO child (parentKey,children) VALUES((select mainKey from mainTest where name = "' + name + '"),"' + item.child + '")', [], function (tx, result) {
_.each(item.values, function (itemNew) {
tx.executeSql('INSERT INTO secondChild (spkey,sales) VALUES((select PKEY from child where children = "' + item.child + '"),"' + itemNew + '")', [], function (tx, result) {}, dbErrorHandler);
});
}, dbErrorHandler);
doLog("after secondChild Insertion");
});
doLog("after child insertion");
}, dbErrorHandler);
doLog("after main insertion");
});
}, dbErrorHandler);}
代碼中沒有嵌套事務。 –
那麼你認爲這是什麼?我應該採取什麼方法來堅持上述結構? –