Oracle 데이터베이스에 연결할 때 java.lang.ArrayIndexOutOfBoundsException 발생

StackOverflow https://stackoverflow.com/questions/5902150

  •  29-10-2019
  •  | 
  •  

문제

Oracle의 Java 클라이언트에 버그가있는 것 같습니다. tnsnames.ora 파일이 특정 위치에 공백 / 탭 / 새 줄을 잘못 배치 한 경우 다음 추적과 함께 예외가 발생합니다. 라코 디스

C ++ 애플리케이션을 사용하고 동일한 tnsnames.ora를 사용하여 데이터베이스에 연결하려고하면 정상적으로 작동합니다.sqlplus도 마찬가지입니다.또한이 파일을 구문 분석해야하는 tnsping는 서비스 이름을 확인하는 데 문제가 없습니다.Oracle이 값 등을 생성하기에는 너무 게으른 것처럼 보이며 Oracle 클라이언트 버전 9, 10 및 11에서도 동일한 문제입니다.

이 문제가 존재하는 이유와 .trim() 형식의 정확한 문제가 무엇인지 아십니까?(나는 그것을 해결하기 위해 모든 공백을 제거합니다)

도움이 되었습니까?

해결책

GriffeyDog의 조언을 시도했지만 안타깝게도 문제가 해결되지 않았습니다. 그래서 결국 저도 check for your self approach :

오라클의 문서에는 tnsnames.ora 파일의 레코드 구조가 다음과 같아야한다고 명시되어 있습니다. 라코 디스

우리는 : 라코 디스

분명히 들여 쓰기가 중요합니다. 단일 net_service_name 블록의 행 중 하나가 색인 1에서 시작하면이 예외가 발생합니다.

모두에 들여 쓰기를 추가하면 (공백 또는 탭 가능) 작동합니다. 멋지게 보일 필요는 없지만 일종의 오프셋이 있어야합니다.

중요 사항-유일한 문제는 '('에 있습니다. 들여 쓰기 규칙은 ')'에 적용되지 않습니다.
예 : 아래 예는 완벽하게 괜찮습니다. 라코 디스

문서화 할이 문제를 검색 한 후 마침내 http://download.oracle.com/docs/cd/A57673_01/DOC/net/doc/NWUS233/apb.htm

다음은 중요한 발췌문입니다. <인용구>

이러한 방식으로 파일을 들여 쓰도록 선택하지 않더라도 줄 바꿈 된 줄을 적어도 하나의 공백으로 들여 쓰기해야합니다. 그렇지 않으면 새 매개 변수로 잘못 인식됩니다 . 다음 레이아웃이 허용됩니다.

(주소= (커뮤니티= tcpcom.world) (프로토콜= tcp)
(HOST= max.world) (PORT= 1521))

다음 레이아웃은 허용되지 않습니다.

(주소= (커뮤니티= tcpcom.world) (프로토콜= tcp)
(HOST= max.world) (PORT= 1521))

다른 팁

텍스트 파일이 Unix 스타일의 LF (End-of-Line)와 DOS / Windows 스타일 (CR / LF) 또는 그 반대로 저장 될 때 유사한 문제가 발생하는 것을 보았습니다.두 형식 모두 저장을 지원하는 편집기로 tnsnames.ora 파일을 열어 문제를 해결할 수 있는지 확인할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top