Подтвердить что ты не робот

Как определить тип базы данных для данного соединения JDBC?

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

databaseName = new PlatformUtils().determineDatabaseType(dataSource)