2013-06-27 4 views
3

Orcale 데이터베이스에 jdbc 연결을 설정하는 Java 응용 프로그램이 있습니다. 데이터베이스에 데이터를 삽입하려고 시도하지만 oracle NUMBER 유형의 경우 혼란 스럽습니다. 나는이 테이블에 각각 세 개의 컬럼을 가지고있다.jdbc prepared statement with oracle NUMBER 유형

NUMBER(38,0) 
NUMBER(20,0) 
NUMBER(16,0) 

첫 번째 질문은 준비된 문에서 사용하기 위해 데이터를 입력해야하는 Java 유형의 유형입니다.

두 번째 질문은 데이터를 삽입하기 위해 준비된 명령문에서 사용할 수있는 set 연산입니다.

우리가 NUMBER (38,0)로 작업하고 있다고 가정합니다. 자바 타입을 BigInteger로 설정하겠습니까? 내가 정수를 가지고 있다면 1이

BigInteger one = new BigInteger(1); 

그런 다음 내 PreparedStatement의에서이

PreparedStatement pstmt = conn.prepareStatement("INSERT INTO TABLE(bigInt) VALUES(?)"); 
pstmt.setLong(1, one); 

이 작동하지 않을 것 것 것, 그래서 나는이 정확하지 않은 것으로 가정합니다. 어떤 도움을 주시면 감사하겠습니다.

+0

당신이 setBigDecimal가()를 시도 않았다 http://docs.oracle.com/javase/ 6/docs/api/java/sql/PreparedStatement.html # setBigDecimal (int, java.math.BigDecimal) –

+0

@BhavikShah setBigDecimal을 시도했지만 ORA-00911 : 잘못된 문자입니다. 나는 심지어 건물 및 SQL 삽입 문을 인쇄 및 SQL 개발자가 붙여 넣기 및 잘 작동합니다. 그것은 단지 자바 내에서 실패하고 있습니다. – medium

+0

나는 이와 비슷한 몇 가지 질문을 따랐다. 불행히도 대답이 안된다. (그러나 대답은 문자열로 저장하도록 제안되었다.)이 미디어는 당신을 위해 일하는가? –

답변

4

setLong()BigInteger을 사용할 수 없습니다. 데이터베이스의 long 범위를 초과하는 값을 가진 경우 setBigInteger()이 없으므로 setBigDecimal()을 사용해야 할 수 있으며 변수는 BigDecimal이어야합니다. long이 데이터베이스의 값 범위를 포함하는 경우 longsetLong()을 사용하십시오.

는이 방법으로 시도 할 수
1

: bigIntegerValuejava.math.BigInteger의 인스턴스

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

를, 그것은 나를 위해 작동