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

时间:2015-09-29 14:12:36

标签: java oracle transformation type-conversion

我一直在寻找与Oracle SQL数据类型NUMERIC / DECIMAL相对应的Java数据类型。

我从网络和其他文档中得到了java.math.BigDecimal的建议。见一个文件。

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

  

DECIMAL和NUMERIC类型的推荐Java映射是   java.math.BigDecimal,一种也表示定点的Java类型   绝对精确的数字。 java.math.BigDecimal类型   提供数学运算以允许添加BigDecimal类型,   用其他BigDecimal类型减去,乘以和除以   整数类型,以及浮点类型。

     

建议用于检索DECIMAL和NUMERIC值的方法是   ResultSet.getBigDecimal。 JDBC还允许访问这些SQL类型   简单的字符串或char数组。因此,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等价物。我怎样才能保持精度和规模等?

1 个答案:

答案 0 :(得分: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);
}