봄의 SimpleJdbcTemplate을 사용하여 데이터베이스의 모든 테이블 이름 목록을 가져 오는 방법이 있습니까?봄 SimpleJdbcTemplate에서 모든 테이블 이름 목록 가져 오기
어떤 방식 으로든 도움이된다면 쿼리되는 데이터베이스는 Oracle입니다. 감사.
봄의 SimpleJdbcTemplate을 사용하여 데이터베이스의 모든 테이블 이름 목록을 가져 오는 방법이 있습니까?봄 SimpleJdbcTemplate에서 모든 테이블 이름 목록 가져 오기
어떤 방식 으로든 도움이된다면 쿼리되는 데이터베이스는 Oracle입니다. 감사.
스프링에는 더피모가 연결되어있는 솔루션의 보일러 플레이트 측면을 처리 할 수있는 객체가 DatabaseMetaDataCallback
있습니다. 그런 다음 JDBCUtils.extractDatabaseMetaData
을 호출 할 때 해당 객체를 전달할 수 있습니다.
이러한 클래스를 사용하여 동일한 호출을 작성하는 예는 here입니다. 링크에서
샘플 코드 :
등급 :
class GetTableNames implements DatabaseMetaDataCallback {
public Object processMetaData(DatabaseMetaData dbmd) throws SQLException {
ResultSet rs = dbmd.getTables(dbmd.getUserName(), null, null, new String[]{"TABLE"});
ArrayList l = new ArrayList();
while (rs.next()) {
l.add(rs.getString(3));
}
return l;
}
}
사용법 :
GetTableNames getTableNames = new GetTableNames();
try {
Object o = JdbcUtils.extractDatabaseMetaData(dataSource, getTableNames);
System.out.println(o);
} catch (MetaDataAccessException e) {
System.out.println(e);
}
항상 Connection을 사용하여 java.sql.DatabaseMetaData를 가져올 수 있습니다. SimpleJdbcTemplate에는 도움이되는 메소드가 없지만 솔직히 필요는 없습니다.
DatabaseMetaData md = c.getMetaData();
ResultSet rs = md.getTables(null, null, "%", null);
while (rs.next()) {
System.out.println(rs.getString(3));
}
그것은 봄 측면 인해 트랜잭션 관리자의 상호 작용 또는 무언가에 중요 가능성이 있습니다. – bmargulies
이와 같은 읽기 전용 작업에는 트랜잭션이 필요하지 않다고 생각합니다. 유일한 문제는 결과가 무효화되는 방식으로 작업을 수행하는 동안 다른 사람이 스키마를 변경하는 경우 일 수 있습니다. 그러한 일이 발생할 수 있다면, 당신은 훨씬 더 큰 문제가 있습니다. – duffymo
해당 링크가 현재 phising 사이트로 리디렉션됩니다 – Justin
USER_TABLES 뷰를 쿼리하면 가져올 수 있습니다.
물론 sqlplus를 둘러싼 모양이 제일 먼저 보입니다.
제 경험상, 응용 프로그램의 "테이블"은 종종 다른 스키마의 테이블과 동의어이므로 ALL_TABLES도 쿼리해야 할 수 있습니다. 내게서 – Dan
+1 - 이것은 지금까지 최고의 답변입니다. 좋은. – duffymo