2013-10-10 3 views
0

최대 절전 모드에서 Oracle 11g를 사용합니다. Hibernate는 시작할 때 스키마의 유효성을 검사하도록 구성되어 있지만 어떤 이유로 테이블을 하나 찾을 수 없으며 실패합니다.DatabaseMetataData에 테이블이 표시되지 않습니다.

동일한 스키마의 다른 테이블을 볼 때 java.sql.DatabaseMetaData에 하나의 테이블 (getTables이 빈 결과 집합을 반환 함)을 표시하지 않는 이상한 상황이 있습니다.

String[] TYPES = {"TABLE", "VIEW"}; 
DatabaseMetaData meta = ... 
meta.getTables(null, "SCHEMA_NAME", "TABLE1", TYPES).next(); // true 
meta.getTables(null, "SCHEMA_NAME", "TABLE2", TYPES).next(); // false 

그러나 다음과 같은 쿼리가 성공적으로 실행됩니다 :

select * from schemaName.table1 
select * from schemaName.table2 

더 나는 사전 테이블을 조회하고이 두 테이블을 볼 수 있습니다

select * from user_tables where table_name in ('TABLE1', 'TABLE2') 
을 나는 상황을 다음 그래서

이유가 무엇일까요?

+0

그것이 동의어 또는 테이블 이름 실제로'TABLE2' ('getTables'은 열 3은 TABLE_NAME 클릭을 나타냅니다

는 알 수 위의 코드 모든 열을 시도 사례가 정확한 일치라고 요구합니까?) –

+0

@MarkRotteveel은 동의어가 아니므로'USER_TABLES'에있는 해당 테이블을 볼 수 있습니다 –

답변

2
DatabaseMetaData md = connection.getMetaData(); 
ResultSet rs = md.getTables(null, null, "%", null); 
while (rs.next()) { 
    System.out.println(rs.getString(3)); 
} 

numbers

+0

답변이 포함 된 코드는이 질문을 읽는 것과 비슷하지만 완전히 똑같은 문제가있는 다른 사용자에게는 쓸모가 없습니다. 따라서 SO에 유용하지 않습니다. – Sumurai8

+0

@ Sumurai8 지금은 유용 할 것입니다. – SpringLearner

+0

테이블이이 연결로 볼 수 있는지 확인했습니다. 그것은 이상한데 왜 응용 프로그램에서 볼 수 없습니까? –

관련 문제