什么Java数据类型对应于Oracle SQL数据类型NUMERIC/DECIMAL,并获得PLSQL的等效Java代码



我正在寻找对应于Oracle SQL数据类型NUMERIC/DECIMAL的Java数据类型。

我从web和其他文档中得到java.math.BigDecimal建议相同。

http://www.cis.upenn.edu/bcpierce/课程/629/jdkdocs/指导/jdbc/getstart/mapping.doc.html

DECIMAL和NUMERIC类型的推荐Java映射是java.math。BigDecimal,一个也表示定点的Java类型具有绝对精度的数字。java.math.BigDecimal类型提供了允许添加BigDecimal类型的数学运算;与其他BigDecimal类型相减、相乘和除整型和浮点型

检索DECIMAL和NUMERIC值的推荐方法是ResultSet.getBigDecimal。JDBC还允许访问这些SQL类型简单的字符串或字符数组。因此,Java程序员可以使用getString接收DECIMAL或NUMERIC结果。然而,这使得使用DECIMAL或NUMERIC表示货币值的常见情况相当尴尬,因为这意味着应用程序编写人员必须对字符串执行数学运算。也可以检索这些SQL

我的最终目标是将Oracle PLSQL逻辑转换为等效的java代码。我试着用逻辑例子来解释。

请看下面的例子:

In Oracle:

DECLARE
    inv_quantity_Balance DECIMAL(10,2);
BEGIN
WHEN (inv_quantity_Balance <= 1) THEN
      inv_quantity_Balance := 2;
ELSE
      inv_quantity_Balance := 3;
END;
Java:

BigDecimal  inv_quantity_Balance  = null ;
if ((inv_quantity_Balance <= 1)) {
    inv_quantity_Balance = 2 ;
}else {
    inv_quantity_Balance = 3 ;
}  

显示编译器错误:

The operator <= is undefined for the argument type(s) BigDecimal, int
Type mismatch: cannot convert from int to BigDecimal

这只是一个样品。请帮助我找到相同的java等效。如何保持精度和比例等

Oracle的NUMERIC和DECIMAL确实可以映射到java.math.BigDecimal

您得到的错误与此映射无关。这与BigDecimal s没有定义算子<=有关。使用compareTo方法进行比较,如下所示:

BigDecimal balance = getSomeBigDecimal();
if (balance.compareTo(BigDecimal.ONE) <= 0) { // lower or equals
    balance = BigDecimal.valueOf(2);
} else {
    balance = BigDecimal.valueOf(3);
}  

最新更新