如何在oracle数据库中存储BigInteger值

时间:2010-06-16 11:22:51

标签: java oracle jdbc oracle10g

我使用JDBC将Java程序连接到Oracle数据库。我想在数据库中存储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 个答案:

答案 0 :(得分:3)

BigInteger和BigDecimal都扩展了java.lang.Number,但这并不意味着您可以从BigInteger转换为Number然后转换为BigDecimal。

BigDecimal中有一个构造函数,它接受一个BigInteger,所以请尝试:

BigDecimal d = new BigDecimal(b);

答案 1 :(得分:0)

我没有直接回答你的问题,但我只看到一个可以存储512位数字的oracle数据类型:varchar2(156)(156 = abs(log(2 ^ 512))+ 2)

所以我宁愿将biginteger转换为字符串而不是bigdecimal。

答案 2 :(得分:0)

您可以使用小数/数值,具体取决于您的数据库限制。

答案 3 :(得分:0)

你可以这样试试:

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

其中bigIntegerValuejava.math.BigInteger的实例,它适用于我