java通过调用javaScript实现表达式计算

这篇博客探讨了如何在Java应用中利用JavaScript引擎来执行动态表达式计算。通过引入JavaScript支持,开发者可以灵活地处理复杂计算任务,增强应用程序的功能。
摘要由CSDN通过智能技术生成
背景:公司的数据库mysql迁移到oracle,之前的表达式全部由mysql计算完成。
例如表达式:if(ifnull(S$AcctPayable$S,0)+ifnull(S$AcctPayable@1$S,0)=0,null,if((if(S$AcctPayable$S=null,0,1)+if(S$AcctPayable@1$S=null,0,1))<=0,null,ifnull(S$OperCost$S,0)*(if(S$AcctPayable$S=null,0,1)+if(S$AcctPayable@1$S=null,0,1))/(ifnull(S$AcctPayable$S,0)+ifnull(S$AcctPayable@1$S,0)))),通过将后端将变量替换,直接select +expression的方式获取计算结果。
方案一:用oracle相关函数替换mysql的函数,主要涉及函数if和ifnull,经调查ifnull函数可以用nvl函数替代,但是if函数只找到decode函数替代,而且不能完美适配,涉及大量表达式的改造,工作量巨大,因此选择放弃此方案。
方案二:通过在oracle自定义函数。ifnull函数可以用val替代,不用自定义,因此只需要自定义一个函数实现mysql中的if函数功能,但实际发现,表达式存在多层嵌套if函数,能力有限,这个函数没写出来,放弃该方案。
方案三:通过java后端调用javaScript自定义函数,代码如下:

代码如下:

import javax.script.ScriptEngineManager;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值