2015-09-29 121 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的正確精度超過了其不精確性。 –

相關問題