как хранить значения BigInteger в базе данных Oracle - PullRequest
5 голосов
/ 16 июня 2010

Я подключил программу Java к базе данных Oracle, используя JDBC.Я хочу хранить BigInteger значения (512 бит) в базе данных.Какой должен быть тип столбца?

Я пытаюсь так:

Я взял столбец числового типа в базе данных.

Я преобразовал BigIntegerна BigDecimal вот так:

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

Я получаю следующее исключение:

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

Что-то не так в этом фрагменте кода?Если есть, пожалуйста, предложите другие методы.

Ответы [ 4 ]

3 голосов
/ 16 июня 2010

И BigInteger, и BigDecimal расширяют java.lang.Number, однако это не означает, что вы можете привести из BigInteger к Number, а затем к BigDecimal.

В BigDecimal есть конструктор, который принимает BigInteger, поэтому попробуйте:

BigDecimal d = new BigDecimal(b);
0 голосов
/ 29 сентября 2014

вы можете попробовать так:

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

, где bigIntegerValue - это экземпляр java.math.BigInteger, у меня это работает

0 голосов
/ 24 октября 2012

Вы можете использовать десятичное / числовое значение в зависимости от ваших ограничений в БД.

0 голосов
/ 16 июня 2010

Я не отвечаю прямо на ваш вопрос, но вижу только один тип данных оракула, который может хранить 512-битное число: varchar2 (156) (156 = abs (log (2 ^ 512)) + 2)

Так что я бы лучше преобразовал biginteger в строку, чем в bigdecimal.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...