這個問題來JayData論壇,但我決定在這裏分享它,因爲這是一個有趣的話題,也許其他人也可以從中受益。JayData的webSQL交易
通過V3nom»星期二2012年10月23日下午2時06
我很難找到有關JayData的WebSQL交易信息。任何人都可以給出提示或鏈接?
http://jaydata.org/forum/viewtopic.php?f=3&t=101&sid=8accd7bf5bed872b6e88d36004a280c5
這個問題來JayData論壇,但我決定在這裏分享它,因爲這是一個有趣的話題,也許其他人也可以從中受益。JayData的webSQL交易
通過V3nom»星期二2012年10月23日下午2時06
我很難找到有關JayData的WebSQL交易信息。任何人都可以給出提示或鏈接?
http://jaydata.org/forum/viewtopic.php?f=3&t=101&sid=8accd7bf5bed872b6e88d36004a280c5
交易不是一件容易的事情,支持對存儲不可知的方式。因此,JayData沒有明確的事務管理,而是可以使用EntityContext的隱含「全部或全部」行爲。關於webSQL,每個增量包(即:末尾的add/update
項和saveChanges()
)在同一個webSQL事務中運行。如果在保存任何項目期間發生錯誤,則所有先前的插入/更新都將被回滾。
一個非常簡單的例子,它顯示了這一點:下面的代碼將兩個項插入到表中,並創建一個重複的鍵錯誤場景。最終的結果是即使第二個插入被拒絕重複,表中也不會有行。
$data.Entity.extend("item", {
ID: { key: true, computed: true, type: 'int' },
data: { type: 'string' }
});
$data.EntityContext.extend("ItemsContainer", {
items: { type: $data.EntitySet, elementType: item }
});
var offlinedb = new ItemsContainer({
name: 'sqLite',
databaseName: 'itemdb'
});
function createLocalData() {
offlinedb.items.add({ data: 'apple' });
offlinedb.items.add({ data: 'orange', ID:1 });
offlinedb.saveChanges(
function() {
}
);
}
這創建了編程回滾,你可以鉤住集合和上下文級別的事件處理程序並在它們中引發異常。在這裏閱讀更多:http://jaydata.org/blog/entitycontext-and-entityset-scoped-event-handlers-in-jaydata-1.2
在此期間我們實現了事務處理,您可以在這裏閱讀:http://jaydata.org/blog/database-transaction-handling-in-jaydata –