2011-02-08 39 views
2

我運行一個ColdFusion事務中的兩個查詢(ColdFusion的9,MySQL的5):如何測試在事務內執行時沒有錯誤的查詢?

private boolean function updates() 
{ 
    transaction 
    { 
     local.foo = new Query(); 
     local.foo.setSql("UPDATE foo SET bar = foo"); 
     local.foo.execute(); 

     local.bar = new Query(); 
     local.bar.setSql("UPDATE bar SET foo = bar"); 
     local.bar.execute(); 
    } 

    if (both updates were successful) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

我想了解以下內容:我應該在if()替換both updates where successful來測試,如果查詢的執行是否正確?

回答

4

該解決方案吞下錯誤,並將其留給調用函數來檢查並重新拋出它們。因此,我改變了你的回報價值。它是一個帶布爾和錯誤數組的結構。

local.result.bool = false; 
local.result.error = ArrayNew(1); 
TRANSACTION action="begin" 
{ 
try{ 
    local.foo = new Query(); 
    local.foo.setSql("UPDATE foo SET bar = foo"); 
    local.foo.execute(); 
    local.bar = new Query(); 
    local.bar.setSql("UPDATE bar SET foo = bar"); 
    local.bar.execute(); 
} 
catch(any excpt){ 
    ArrayAppend(local.result.error, excpt); 
}finally{ 
    if(ArrayLen(local.result.error) gt 0){ 
     transactionRollback(); 
    }else{ 
     local.result.bool = true; 
    } 
} 
} 
return local.result; 
+0

免責聲明 - 我離開我的coldfusion 9環境,我希望我有那個完全正確的... – DefyGravity 2011-02-08 18:35:40