今天在修复一些现有代码中的错误时,我发现了一个奇怪的错误。
Branch target offset too large for short
搜索后发现与Java字节码转换有关。以下是我找到的链接:
就我而言,cftransaction 包含大约 870 条语句,并且运行良好。但我需要向此事务添加 2 个查询。现在,当我在 cftransaction 中添加一行代码时,我得到了这个错误。目前我无法将任何现有的 cfquery 移出 cftransaction。
下面是代码的整体结构:
<cftransaction action="begin">
<cfif URL.action eq 'add'>
Around 200 lines of queries/statements
<cfelseif URL.action eq 'edit'>
Around 200 lines of queries/statements
</cfif>
<cfif URL.action eq 'add' or URL.action 'edit'>
Around 450 lines of queries/statements
</cfif>
</cftransaction>
有什么办法可以解决这个问题吗?
最佳答案
分支偏移与模块/功能的大小有关。也可能是由于 cfif/cfelse
的大条件代码块造成的。或 cfswitch
.
从技术上讲,我不确定是否有任何上限。您可以在 cftransaciton
中输入的查询堵塞。它与从 CF8 到 CF9 的代码迁移无关,而是与条件 block 内代码的长度有关。
我想拆分函数并尝试将每个大型条件 block 作为单独的函数放入 cfc 中:
<cffunction name="myFunc1">
<cftransaction action="begin">
<cfif URL.action eq 'add'>
<!--- function call with your xxx lines of queries/statements --->
<cfinvoke component="MyCfc" method="firstQueryBlock" result="result1">
<cfelseif URL.action eq 'edit'>
<!--- second function call with your yyy lines of queries/statements --->
<cfinvoke component="MyCfc" method="secondQueryBlock" result="result2">
</cfif>
<cfif URL.action eq 'add' or URL.action 'edit'>
<!--- third function call with your zzz lines of queries/statements --->
<cfinvoke component="MyCfc" method="thirdQueryBlock" result="result3">
</cfif>
</cftransaction>
</cffunction>
关于coldfusion - 我们可以在 cftransaction 中编写的数量查询/语句是否有任何限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31024940/