2010-06-16 6 views
5

J'ai connecté le programme Java à la base de données Oracle en utilisant JDBC. Je veux stocker BigInteger valeurs (512 bits) dans la base de données. Quel devrait être le type de la colonne?comment stocker les valeurs BigInteger dans la base de données Oracle

Je suis en train comme ceci:

J'ai pris une colonne de type de numéro dans la base de données.

Je convertis BigInteger-BigDecimal comme ceci:

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

Je reçois l'exception suivante:

 
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 

Y at-il quelque chose de mal dans cet extrait de code? Si oui, suggérez d'autres méthodes.

+0

S'il vous plaît formater votre question avec des listes. Certains pointeurs [ici] (http://stackoverflow.com/editing-help) – bdhar

+0

puis-je stocker BigDecimal dans une colonne de type NUMBER – condinya

Répondre

0

Je ne réponds pas directement à votre question, mais je ne vois qu'un seul oracle type de données qui permet de stocker un nombre 512 bits: varchar2 (156) (156 = abs (log (2^512)) + 2)

Donc je préfère convertir le biginteger en chaîne plutôt qu'en bigdécimal.

+0

J'ai utilisé varchar2 (4000) et ça marche. – condinya

+0

a 'RAW (64)' fonctionnerait aussi bien. –

3

BigInteger et BigDecimal étendent java.lang.Number, mais cela ne signifie pas que vous pouvez transtyper de BigInteger à Number puis à BigDecimal.

Il est un constructeur BigDecimal qui prend un BigInteger, alors essayez:

BigDecimal d = new BigDecimal(b); 
+0

j'ai essayé mais je reçois une autre exception. javax.servlet.ServletException: java.sql.SQLException: [Oracle] [ODBC] Valeur de précision non valide. cause initiale java.sql.SQLException: [Oracle] [ODBC] Valeur de précision non valide – condinya

+0

Possible que le type de colonne dans lequel vous insérez n'accepte pas BigDecimal? – DaveJohnston

0

Vous pouvez utiliser une valeur décimale/numérique en fonction de vos limites db.

0

vous pouvez essayer cette façon:

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

bigIntegerValue est une instance de java.math.BigInteger, ça marche pour moi

+0

Il ne rentrerait toujours pas dans une colonne NUMBER, car le type de données NUMBER est limité à environ 40 chiffres maximum. –

Questions connexes