2010-06-16 7 views
5

Ho collegato il programma Java al database Oracle utilizzando JDBC. Voglio memorizzare i valori BigInteger (512 bit) nel database. Quale dovrebbe essere il tipo di colonna?come memorizzare i valori di BigInteger nel database Oracle

mi sto cercando in questo modo:

io ho preso una colonna di tipo di numero nel database.

ho convertito BigInteger-BigDecimal in questo modo:

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); 

Sto ottenendo il seguente eccezione:

 
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 

qualcosa che non va in questo frammento di codice? Se c'è, si prega di suggerire altri metodi.

+0

formattare la tua domanda con le liste. Alcuni puntatori [qui] (http://stackoverflow.com/editing-help) – bdhar

+0

posso memorizzare BigDecimal in una colonna di NUMBER tipo – condinya

risposta

0

Non sto rispondendo direttamente alla tua domanda, ma io vedo solo un tipo di dati Oracle in grado di memorizzare un numero di 512 bit: varchar2 (156) (156 = abs (log (2^512)) + 2)

Quindi, preferirei convertire il biginteger in una stringa piuttosto che in un bigdecimal.

+0

ho usato varchar2 (4000) e sta funzionando. – condinya

+0

un 'RAW (64)' funzionerebbe pure. –

3

Sia BigInteger che BigDecimal estendono java.lang.Number, tuttavia ciò non significa che è possibile eseguire il cast da BigInteger fino a Number, quindi a BigDecimal.

C'è un costruttore in BigDecimal che prende un BigInteger, in modo da provare:

BigDecimal d = new BigDecimal(b); 
+0

ho provato ma sto ottenendo un'altra eccezione. javax.servlet.ServletException: java.sql.SQLException: [Oracle] [ODBC] Valore di precisione non valido. root cause java.sql.SQLException: [Oracle] [ODBC] Valore di precisione non valido – condinya

+0

Possibile che il tipo di colonna in cui si sta inserendo non accetti BigDecimal? – DaveJohnston

0

È possibile utilizzare un valore decimale/numerico in base ai limiti di db.

0

si può provare in questo modo:

oracle.sql.NUMBER numberValue = new oracle.sql.NUMBER(bigIntegerValue); 
cs.setObject(id, numberValue, OracleTypes.NUMBER); 

dove bigIntegerValue è un'istanza di java.math.BigInteger, funziona per me

+0

Non si adatterà ancora a una colonna NUMBER, poiché il tipo di dati NUMBER è limitato a circa 40 cifre massimo. –