Как определить тип базы данных для данного соединения JDBC? - PullRequest
30 голосов
/ 31 октября 2008

Мне нужно обработать наборы результатов, возвращающие хранимые процедуры / функции для трех баз данных (Oracle, sybase, MS-Server). Процедуры / функции обычно одинаковы, но вызов немного отличается в Oracle.

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

JDBC не предоставляет общего способа справиться с этим, поэтому мне нужно будет различать разные типы БД в моем коде. Мне дали соединение, но я не знаю, как определить, является ли БД оракулом. Я могу использовать имя водителя, но лучше найти более понятный способ.

Ответы [ 2 ]

48 голосов
/ 31 октября 2008

Я подозреваю, что вы захотите использовать класс DatabaseMetaData. Скорее всего DatabaseMetaData.getDatabaseProductName будет достаточно, хотя вы также можете использовать метод getDatabaseProductVersion, если у вас есть код, который зависит от конкретной версии конкретной базы данных, с которой вы работаете.

2 голосов
/ 30 января 2012

Вы можете использовать org.apache.ddlutils, класс Platformutils :

databaseName = new PlatformUtils().determineDatabaseType(dataSource)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...