Я делаю программное обеспечение на C ++, которое разрешает доступ к некоторым rdbms с библиотекой qt.
Программное обеспечение только для ПК.
Программное обеспечение должно знать имя rdbms и версию, потому что программе нужно выбрать какой-нибудь SQL-запрос для выполнения. Есть ли способ получить эти данные в любой rdbms?
Есть ли способ получить эти данные в любой rdbms?
Это специфично для каждой СУБД — например, в Oracle вы можете сделать
select *
from v$version;
но в других СУБД эта точка зрения не существует.
Некоторые возможные подходы:
В любом случае вам нужно где-то определить параметры подключения. Даже они часто специфичны для СУБД, поэтому вы можете просто добавить другой параметр, например SQLFlavor=Oracle
или же SQLFlavor=MySQL
а затем использовать значение SQLFlavor
в вашем коде, чтобы определить, какой оператор SQL использовать
Вы можете использовать некоторые эвристические методы, чтобы найти РСУБД. Например, запросить v$version
посмотреть — если он не существует, вы получите сообщение об ошибке, и вы знаете, что это не Oracle, и вы можете продолжить со следующей попытки (например, SELECT VERSION()
чтобы увидеть, если это MySQL). В противном случае вы можете использовать результат, чтобы узнать конкретную версию Oracle.
Других решений пока нет …