2010-06-16 15 views
5

JDBC'yi kullanarak Java programını Oracle veritabanına bağladım. Veritabanına BigInteger değerlerini (512 bit) kaydetmek istiyorum. Sütunun türü ne olmalı?oracle veritabanında BigInteger değerlerini nasıl depolarsınız

böyle çalışıyorum:

ben veritabanında sayı türünde bir sütun almış.

böyle BigDecimal için BigInteger dönüştürülen:

BigInteger b=new BigInteger("5779857570957802579079"); 
Number n =b; 
BigDecimal d=(BigDecimal)n; 

PreparedStatement pstmt=con.prepareStatemant("insert into database values(?,?)"); 
pstmt.setString(1,"john"); 
pstmt.setBigDecimal(2,d); 

aşağıdaki özel durum alıyorum: Bu kod parçacığı yanlış bir şey

 
javax.servlet.ServletException: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.math.BigDecimal 
root cause 

java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.math.BigDecimal 

var mı? Varsa, başka yöntemler öneriniz.

+0

listeleri ile sorunuzu biçimlendirmek Lütfen için

bigIntegerValuejava.math.BigInteger bir örneğidir
oracle.sql.NUMBER numberValue = new oracle.sql.NUMBER(bigIntegerValue); cs.setObject(id, numberValue, OracleTypes.NUMBER); 

işe yarıyor. Bazı işaretçiler [burada] (http://stackoverflow.com/editing-help) – bdhar

+0

BigDecimal'i denediğim bir NUMBER NUMARASI – condinya

cevap

0

, ama sadece 512 bit numarası saklayabilir bir oracle veri türü bkz: Bir BigInteger alır BigDecimal bir yapıcı vardır

, bu yüzden denemek varchar2 (156) (156 = abs (log (2^512)) + 2)

Bu yüzden, biginteger'i bir bigdecimal yerine bir dizgeye dönüştürmeyi tercih ederim.

+0

Ben varchar2 (4000) kullandı ve çalışıyor. – condinya

+0

a RAW (64) 'da çalışırdı. –

3

Hem BigInteger hem de BigDecimal, java.lang.Number öğesini genişletir, ancak BigInteger'den Number'a ve daha sonra BigDecimal'e kadar yayınlayabileceğiniz anlamına gelmez. Ben doğrudan soru cevap vermeyeceğim

BigDecimal d = new BigDecimal(b); 
+0

sütununda saklayabilirim ancak başka bir istisna alıyorum. javax.servlet.ServletException: java.sql.SQLException: [Oracle] [ODBC] Geçersiz kesinlik değeri. kök neden java.sql.SQLException: [Oracle] [ODBC] Geçersiz kesinlik değeri – condinya

+0

Kullanmakta olduğunuz sütunun türü BigDecimal'i kabul etmiyor mu? – DaveJohnston

0

Db sınırlarınıza bağlı olarak ondalık/sayısal bir değer kullanabilirsiniz. Bu şekilde deneyebilirsiniz

0

: Beni

+0

NUMBER veri türü maksimum 40 basamak ile sınırlandırıldığı için NUMBER sütuna sığmayacaktı. –