2015-01-14 4 views
1

reference 말 준비된 명령문에 전달 = '2039487894563827398440987'BigInteger를에 큰 문자열로 변환 내가이 캐릭터를

나는에

처럼 다음
def reference = new BigInteger(reference) 

과 뭔가를 수행하여 BigInteger를로 변환하려고 준비된 명령문 나는

ps.setLong(reference); 

있는 나는,이 값은을 가지고 매핑하고 데이터베이스 column(XYZ)로 설정하고BigInt(40). 그러나 성명서를 실행하면 예외가 표시됩니다.

SQLSTATEEXCEPTION: Out of range value of column `XYZ` at row 1 

이러한 상황을 어떻게 처리 할 수 ​​있습니까?

: 시도한 setBigDecimal(reference);도 마찬가지입니다.

답변

1

setLong() 대신 setBigDecimal()을 사용할 수 있습니다.

+0

예. 내 의견을 편집하십시오. – Sajjad

+0

setBigDecimal을 사용하려면 BigInteger를 BigDecimal, 즉 ps.setBigDecimal (new BigDecimal (reference))로 변환해야합니다. –

+0

@JRichardSnape 네, 그 사실을 확신했습니다. – Sajjad

1

MySQL BIGINT 열에는 사용자 번호가 너무 큽니다. these docs을 읽으면 BIGINT 데이터 유형이 큰 숫자를 가질 수 없다는 것을 알 수 있습니다 (최대 값은 9223372036854775807 또는 18446744073709551615 부호 없음). 다양한 서버 유형에 대한 문서를 통해보다 포괄적 인 모양을 보려면 this answer을 참조하십시오.

데이터베이스의 유형을 변경할 수있는 경우이를 숫자 필드로 변경하거나 문자열로 저장하거나 바이트 배열로 변환하여 이진 Blob로 저장하는 것이 좋습니다.

편집 : 완성도를 들어

- 사람이 40BIGINT(40)에서 무엇을 의미하는지에 대한 혼란 경우. 그것은 거의 아무것도 의미하지 않습니다. 확실히 저장된 숫자의 크기에는 영향을 미치지 않습니다. 항상 8 바이트 (64 비트)입니다. 숫자를 표시하는 방법, 즉 처음 40 자리를 표시하는 방법에 대한 데이터베이스의 힌트입니다. 제로 패딩에 영향을 줄 수 있습니다 (예 : 값 1234567895을 열에 넣으면 12345678900005으로 표시 될 수 있습니다. 사용할 수있는 다른 유형의 경우 the docs을 확인하십시오.

BigInt 필드가 저장할 수있는 가장 긴 숫자는 기본 10에서 20 자리 길이이므로 40은 실제로 거의 아무 의미가 없음에 유의하십시오.

+0

그래, 사실을 BIGINT (40)와 함께 알고 있습니다. 그저 DB에있는 데이터 유형을 변경하는 대신에 다른 방법이 없다는 것이 궁금합니다. – Sajjad

+1

기본적으로는 생각하지 않습니다. 2039487894563827398440987> 18446744073709551615 - 이는 적합하지 않습니다. 큰 숫자를 저장하려면 다른 데이터 유형이 필요합니다. –