我使用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
此代码段中有什么问题吗?如果有,请提出其他方法。
答案 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);
其中bigIntegerValue
是java.math.BigInteger
的实例,它适用于我