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

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

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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
34
0
19 903
2

Ответы 2

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

В Microsoft SQL Server в качестве названия продукта используется «Microsoft SQL Server».

OldCurmudgeon 08.06.2012 20:04

PostgreSQL дает "PostgreSQL"

BxlSofty 29.12.2013 08:51

MySQL предоставляет «MySQL», а HSQLDB дает «HSQL Database Engine».

Cannoliopsida 12.06.2014 22:58

Дерби дает "Apache Derby"

Peter L 07.10.2016 05:13

Есть ли перечисление, которое мы могли бы использовать для сравнения?

Farid 05.09.2017 10:58

Большинство других значений перечислены в этом ответе: stackoverflow.com/questions/9320200/…

Vadzim 03.06.2020 01:03

H2 дает «H2».

Igor Mukhin 04.06.2020 13:29

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

databaseName = new PlatformUtils().determineDatabaseType(dataSource)

Другие вопросы по теме