2010-06-16 7 views
5

Java 프로그램을 JDBC를 사용하여 Oracle 데이터베이스에 연결했습니다. BigInteger 값 (512 비트)을 데이터베이스에 저장하려고합니다. 열의 유형은 무엇이되어야합니까?오라클 데이터베이스에 BigInteger 값을 저장하는 방법

나는이 같은 노력하고있어 :

나는 데이터베이스에 숫자 형식의 열을 촬영했다.

내가 이런 BigDecimalBigInteger 변환 :

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

목록과 질문의 형식을하신 후

bigIntegerValuejava.math.BigInteger의 인스턴스
oracle.sql.NUMBER numberValue = new oracle.sql.NUMBER(bigIntegerValue); cs.setObject(id, numberValue, OracleTypes.NUMBER); 

, 그것을 작동합니다. 일부 포인터 [여기] (http://stackoverflow.com/editing-help) – bdhar

+0

수 난 숫자 형식 – condinya

답변

0

을,하지만 난 단지 512 비트 번호를 저장할 수있는 하나 개의 오라클 데이터 유형을 참조하십시오 : BigInteger를 소요의 BigDecimal의 생성자가있다

, 그래서 시도 VARCHAR2를 (156 = abs (log (2^512)) + 2)

그래서 biginteger 대신 bigdegimal을 문자열로 변환합니다.

+0

나는 varchar2 (4000)를 사용했으며 작동 중이다. – condinya

+0

'RAW (64)'도 사용할 수 있습니다. –

3

BigInteger와 BigDecimal은 모두 java.lang.Number를 확장하지만 BigInteger에서 Number까지 그리고 BigDecimal에서 캐스팅 할 수 있음을 의미하지는 않습니다. 내가 직접 질문에 대답하고 있지 않다

BigDecimal d = new BigDecimal(b); 
+0

열의 BigDecimal 저장할 수 있지만 다른 예외가 점점. javax.servlet.ServletException : java.sql.SQLException : [Oracle] [ODBC] 정밀도 값이 잘못되었습니다. 근본 원인 java.sql.SQLException : [Oracle] [ODBC] 유효하지 않은 정밀도 값 – condinya

+0

삽입 할 열의 유형이 BigDecimal을 허용하지 않을 가능성이 있습니까? – DaveJohnston

0

db 한계에 따라 10 진수/숫자 값을 사용할 수 있습니다. 이 방법을 시도 할 수 있습니다

0

: 날이

+0

NUMBER 데이터 유형이 최대 약 40 자리로 제한되므로 NUMBER 열에 맞지 않습니다. –

관련 문제