как сохранить значения BigInteger в базе данных оракула

Я подключил программу 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

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

5
задан Joachim Sauer 16 June 2010 в 11:26
поделиться

2 ответа

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

Поэтому я бы предпочел преобразовать большое число в строку, а не в десятичное.

0
ответ дан 15 December 2019 в 06:15
поделиться

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

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

BigDecimal d = new BigDecimal(b);
3
ответ дан 15 December 2019 в 06:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: