2015-09-29 77 views
0

我正在寻找对应于Oracle SQL数据类型NUMERIC/DECIMAL的Java数据类型。什么Java数据类型对应于Oracle SQL数据类型NUMERIC/DECIMAL并获得PLSQL的等效Java代码?

我从web和其他文档中得到了推荐使用java.math.BigDecimal的相同内容。看到一个文件。

http://www.cis.upenn.edu/~bcpierce/courses/629/jdkdocs/guide/jdbc/getstart/mapping.doc.html

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

建议用于检索DECIMAL和NUMERIC值的方法是 ResultSet.getBigDecimal。 JDBC还允许访问这些SQL类型,如 简单字符串或字符数组。因此,Java程序员可以使用 getString来接收DECIMAL或NUMERIC结果。然而,这使得DECIMAL或NUMERIC用于货币值 比较尴尬,这是因为这意味着应用程序编写者必须 在字符串上执行数学运算。也可以将这些SQL 类型检索为任何Java数字类型。

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

见下面的例子:

在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等价物。我如何保持精度和比例等?

回答

0

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

您遇到的错误与此映射无关。它与运营商<=没有为BigDecimal定义的事实有关。使用compareTo方法进行比较,如下所示:

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

数学运算符(例如'+, - ,/,*':add,multiply等等)也是一样的。丑陋,但BigDecimal的正确精度超过了其不精确性。 –

相关问题