2009-06-06 3 views
2

Мне было поручено получить возможность создания dll, которая берет некоторые входы, такие как имя базы данных (Mysql, access, sql, oracle и т. Д.) И еще несколько входы для генерации запроса и на основе того, что dll должно вернуть набор записей в приложение.Является ли сборка DLL совместимой ко всем базам данных хорошей идеей

Это хорошая идея? Если да, то какие вклады следует учитывать?

ответ

4

Это вполне осуществимо, проблемы возникают, когда вы сталкиваетесь с различными грамматиками SQL - посмотрите, как Hibernate обрабатывает это с использованием диалектов.

Популярные базы данных - Oracle, Sybase, MS SQL Server, MySQL - имеют небольшие отличия в грамматике SQL, которую они позволяют. В сущности, поставщики реализовали и расширили ANSI SQL по-разному.

Самый простой случай, я могу думать о том, когда, как вы присвоить псевдонимы имен столбцов, некоторые базы данных требуют этого:

SELECT x AS y FROM some_table 

в то время как другие требуют:

SELECT x y FROM some_table 

Там же много таких примеров , но нижняя строка заключается в том, что при написании слоя абстракции запроса, который работает во всех базах данных, вам нужно абстрагироваться от концепции генерации SQL, чтобы она могла быть адаптирована к каждой базе данных, которую вы собираетесь поддерживать (как я уже сказал, Hibernate делает это позволяя вам указать диалект, специфичный для используемой базы данных).

+0

спасибо за ответ, но я его не понял. , пожалуйста, объясните немного подробнее. –

+0

ОК Спасибо ... за объяснение. можете ли вы, пожалуйста, также посоветовать мне hhow пойти с hibernate actully, что я нашел, это его nhibernate для dotnet. не могли бы вы посоветовать мне. –

+0

Я думаю, что ваше задание хочет что-то вроде класса Hibernate Criteria - вы устанавливаете атрибуты запроса и получаете список объектов, соответствующих этим атрибутам. Внутри Hibernate генерируется SQL-запрос (с соответствующим диалектом) и анализируется набор результатов, сопоставляющий каждую строку с объектом. Для вашего задания вам просто нужно сгенерировать запрос и вернуть результирующий набор - в его простейшей форме это просто конкатенация строк, где вы комбинируете переменные, такие как имена таблиц и столбцов, для создания оператора select (Примечание: это не так Hibernate делает это, это совсем другая история). –

 Смежные вопросы

  • Нет связанных вопросов^_^