2008-10-31 10 views
23

J'ai besoin de gérer les résultats renvoyant des procédures/fonctions stockées pour trois bases de données (Oracle, sybase, MS-Server). Les procédures/fonctions sont généralement les mêmes mais l'appel est un peu différent dans Oracle.Comment déterminer le type de base de données pour une connexion JDBC donnée?

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

JDBC ne fournit pas de manière générique pour gérer cela, donc je vais avoir besoin de distinguer les différents types de blocs de données dans mon code. On me donne la connexion mais je ne connais pas la meilleure façon de déterminer si la base de données est oracle. Je peux utiliser le nom du pilote mais préférerais trouver un moyen plus propre.

Répondre

40

Je suppose que vous voudriez utiliser la classe DatabaseMetaData. Il est probable que DatabaseMetaData.getDatabaseProductName suffira, bien que vous souhaitiez également utiliser la méthode getDatabaseProductVersion si le code dépend de la version de la base de données avec laquelle vous travaillez.

+8

Microsoft SQL Server donne "Microsoft SQL Server" pour le nom du produit. – OldCurmudgeon

+6

Oracle donne "Oracle" – OldCurmudgeon

+9

PostgreSQL donne "PostgreSQL" –

1

Vous pouvez utiliser org.apache.ddlutils, classe Platformutils:

databaseName = new PlatformUtils().determineDatabaseType(dataSource) 
Questions connexes