2008-10-31 2 views
23

세 데이터베이스 (Oracle, sybase, MS-Server)에 대한 저장 프로 시저/함수를 반환하는 결과 집합을 처리해야합니다. 프로 시저/함수는 일반적으로 동일하지만 호출은 Oracle에서 약간 다릅니다.주어진 JDBC 연결에 대한 데이터베이스 유형을 결정하는 방법은 무엇입니까?

statement.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR); 
... 
statement.execute(); 
ResultSet rs = (ResultSet)statement.getObject(1); 

JDBC는이를 처리하는 일반적인 방법을 제공하지 않으므로 코드에서 다른 유형의 DB를 구별해야합니다. 연결은 제공되지만 DB가 오라클인지 확인하는 가장 좋은 방법을 모릅니다. 드라이버 이름을 사용할 수는 있지만 더 깔끔한 방법을 찾고 싶습니다.

답변

40

여러분은 DatabaseMetaData 클래스를 사용하고자한다고 생각합니다. 대부분 DatabaseMetaData.getDatabaseProductName 일 가능성이 높습니다. 작업하고있는 특정 데이터베이스의 특정 버전에 의존하는 코드가있는 경우 getDatabaseProductVersion 메서드를 사용할 수도 있습니다.

+8

마이크로 소프트 SQL 서버는 제품 이름을 "Microsoft SQL Server를"제공합니다. – OldCurmudgeon

+6

오라클은 "Oracle"을 제공합니다 – OldCurmudgeon

+9

PostgreSQL은 "PostgreSQL"을 제공합니다 –

1

당신은 org.apache.ddlutils, 클래스 Platformutils 사용할 수 있습니다

databaseName = new PlatformUtils().determineDatabaseType(dataSource) 
관련 문제