2008-10-31 12 views
23

Necesito manejar resultados que devuelven procedimientos/funciones almacenados para tres bases de datos (Oracle, sybase, MS-Server). Los procedimientos/funciones son generalmente los mismos, pero la llamada es un poco diferente en Oracle.¿Cómo determinar el tipo de base de datos para una conexión JDBC determinada?

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

JDBC no proporciona una forma genérica para manejar esto, por lo que tendrá que distinguir los diferentes tipos de DBS en mi código. Me dieron la conexión pero no sé cuál es la mejor manera de determinar si el DB es Oracle. Puedo usar el nombre del controlador, pero preferiría encontrar una manera más limpia.

Respuesta

40

Sospecho que querrá usar la clase DatabaseMetaData. Lo más probable es que DatabaseMetaData.getDatabaseProductName sea suficiente, aunque también puede utilizar el método getDatabaseProductVersion si tiene un código que depende de la versión particular de la base de datos particular con la que está trabajando.

+8

Microsoft SQL Server da "Microsoft SQL Server" para el nombre del producto. – OldCurmudgeon

+6

Oracle da "Oracle" – OldCurmudgeon

+9

PostgreSQL da "PostgreSQL" –

1

Puede utilizar org.apache.ddlutils, clase Platformutils:

databaseName = new PlatformUtils().determineDatabaseType(dataSource) 
Cuestiones relacionadas