Я подключил программу 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
Есть ли в этом фрагменте кода что-то не так? Если существует, предложите другие методы.
Я не отвечаю напрямую на ваш вопрос, но вижу только один тип данных Oracle, который может хранить 512-битное число: varchar2 (156) (156 = abs (log (2 ^ 512)) + 2)
Поэтому я бы предпочел преобразовать большое число в строку, а не в десятичное.
И BigInteger, и BigDecimal расширяют java.lang.Number, но это не так. означают, что вы можете выполнить приведение от BigInteger к Number, а затем к BigDecimal.
В BigDecimal есть конструктор, который принимает BigInteger, поэтому попробуйте:
BigDecimal d = new BigDecimal(b);