H2是由java语言编写的,是一个在单元测试时很好用的一个内存数据库,但是也有它所不支持的内容,就拿两个数相除来说,在oracle中只需要/就能够解决问题,而在H2中则无法识别,那么肿么办呢?莫慌。。。H2提供了一种自定义函数的接入方式,可以通过在java代码中自定义函数算法达到你计算的目的,只需要为此函数在H2中设置一个别名就可用了,非常方便。
public class H2Function {
public static BigDecimal divFunction(BigDecimal b1,BigDecimal b2){
if(b1 == null || b2 == null){
return null;
}else if (b2.compareTo(BigDecimal.ZERO) == 0){
throw new IllegalArgumentException("分母不可为零");
}
return b1.divide(b2,16,RoundingMode.HALF_UP);
}
}
然后在H2的程序初始化脚本中按照下面命令规范写好就可以在H2的操作sql中使用此除法函数了
CREATE ALIAS [IF NOT EXISTS] newFunctionAliasName FOR classAndMethodName