Можно ли использовать JDBC в качестве уровня абстракции для RDBMS? - PullRequest
2 голосов
/ 09 февраля 2011

JDBC предоставляет API, который может использоваться для подключения к различным RDBMS или аналогичным хранилищам данных. Но хранилища данных различаются по реализации (например, диалекты SQL).

Можно ли использовать JDBC таким образом, чтобы мои запросы и операторы работали на наиболее распространенных СУБД (например, Oracle, PostgreSQL, SQL Server, MySQL)?

Этот вопрос интересен мне в двух аспектах: * Общий SQL (INSERT, UPDATE, SELECT и т. Д.) * Доступ к метаданным (получение информации о таблицах и столбцах)

В настоящее время я экспериментирую с самостоятельно написанной средой персистентности и хочу подключить к ней хранилище данных JDBC. Поэтому, если я напишу адаптер хранилища данных JDBC, было бы неплохо, если бы он работал на наиболее распространенных СУБД.

Заранее спасибо

Ответы [ 3 ]

5 голосов
/ 09 февраля 2011

JDBC является уровнем абстракции для СУБД.

К сожалению, как вы уже поняли в своем вопросе, абстракция утечка .

Если вы придерживаетесь небольшого подмножества SQL и метаданных, общих для всех СУБД, все будет в порядке. Однако в действительности вы, скорее всего, быстро перерастете эти пределы.

2 голосов
/ 09 февраля 2011

Нет, это невозможно, потому что они служат двум совершенно различным целям.

JDBC является абстракцией коммуникационного протокола СУБД , тогда как SQL является языком запросов.

Запросы, написанные на SQL, отправляются на сервер с использованием этого протокола связи, а затем результаты запросов возвращаются через этот протокол (независимым от СУБД способом).

Кажется, что между протоколом связи и запросами есть размытая линия, поскольку JDBC API также определяет вызовы для получения метаданных с сервера (или из результата). Но на самом деле водитель может свободно использовать любое транспортное средство, которое сочтет подходящим. Это не обязательно должен быть запрос SQL.

1 голос
/ 09 февраля 2011

JDBC работает как абстракция СУБД примерно в той же степени, что и SQL: базовые запросы достаточно совместимы, но вы постоянно сталкиваетесь с требованиями, которые могут быть реализованы только с помощью специфических для поставщика функций:

  • автоинкрементные колонки
  • пейджинг
  • интернационализация
  • и т.д.
...