Как определить тип базы данных для данного соединения JDBC?
Мне нужно обработать конечные объекты, возвращающие хранимые процедуры/функции для трех баз данных (Oracle, sybase, MS-Server). Процедуры/функции, как правило, одинаковы, но в Oracle Oracle немного отличается.
statement.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
...
statement.execute();
ResultSet rs = (ResultSet)statement.getObject(1);
JDBC не предоставляет общий способ справиться с этим, поэтому мне нужно будет различать различные типы БД в моем коде. Мне дается соединение, но не знаю, как лучше определить, является ли БД оракулом. Я могу использовать имя драйвера, но лучше нашел бы более чистый способ.
Ответы
Ответ 1
Я подозреваю, что вы захотите использовать класс DatabaseMetaData. Скорее всего, DatabaseMetaData.getDatabaseProductName было бы достаточно, хотя вы также можете использовать метод getDatabaseProductVersion, если у вас есть код, который зависит от конкретной версии конкретную базу данных, с которой вы работаете.
Ответ 2
Вы можете использовать org.apache.ddlutils, класс Platformutils:
databaseName = new PlatformUtils().determineDatabaseType(dataSource)