Sdílet prostřednictvím


Řešení ODBC

Otázka je tedy, jak odbc standardizuje přístup k databázi? Existují dva požadavky na architekturu:

  • Aplikace musí mít přístup k více dbMS pomocí stejného zdrojového kódu bez opětovného zkompilování nebo opětovného propojení.

  • Aplikace musí mít současně přístup k více DBMS.

A je zde ještě jedna otázka vzhledem k realitě trhu.

  • Které funkce DBMS by měly rozhraní ODBC vystavit? Pouze funkce, které jsou společné pro všechny DBMS nebo jakékoli funkce, které jsou k dispozici v některé dbms?

ODBC tyto problémy řeší následujícím způsobem:

  • Rozhraní ODBC je rozhraní na úrovni volání. Pokud chcete vyřešit problém, jak aplikace přistupují k více dbMS pomocí stejného zdrojového kódu, odbc definuje standardní rozhraní příkazového řádku. Obsahuje všechny funkce ve specifikacích rozhraní příkazového řádku od Open Group a ISO/IEC a poskytuje další funkce, které aplikace běžně vyžadují.

    Pro každou dbMS, která podporuje rozhraní ODBC, se vyžaduje jiná knihovna nebo ovladač. Ovladač implementuje funkce v rozhraní ODBC API. Pokud chcete použít jiný ovladač, aplikace nemusí být znovu zkompilována ani znovu propojena. Namísto toho aplikace jednoduše načte nový ovladač a volá jeho funkce. Pro přístup k více DBMS současně načte aplikace více ovladačů. Způsob podpory ovladačů je specifický pro operační systém. Například v operačním systému Microsoft Windows jsou ovladače dynamické knihovny (DLL).

  • ROZHRANÍ ODBC definuje standardní gramatiku SQL. Kromě standardního rozhraní na úrovni volání definuje rozhraní ODBC standardní gramatiku SQL. Tato gramatika je založená na specifikaci CAE open group SQL. Rozdíly mezi těmito dvěma gramatikami jsou menší a primárně jsou způsobeny rozdíly mezi gramatikou JAZYKa SQL vyžadovanou vloženým JAZYKem SQL (Open Group) a rozhraním příkazového řádku (ODBC). K dispozici jsou také některá rozšíření gramatiky, která zpřístupňují běžně dostupné jazykové funkce, které gramatika Open Group nepokrývá.

    Aplikace mohou odesílat příkazy pomocí specifické gramatiky pro ODBC nebo DBMS. Pokud příkaz používá gramatiku ODBC, která se liší od gramatiky specifické pro DBMS, ovladač ho před odesláním do zdroje dat převede. Tyto převody jsou však vzácné, protože většina dbMS už používá standardní gramatiku SQL.

  • Rozhraní ODBC poskytuje Správce ovladačů pro správu souběžného přístupu k více dbMS. I když použití ovladačů řeší problém současného přístupu k více dbMS, může být kód, který to provede, složitý. Aplikace navržené tak, aby fungovaly se všemi ovladači, nelze staticky propojit s žádnými ovladači. Místo toho musí načíst ovladače během běhu programu a volat v nich funkce prostřednictvím tabulky ukazatelů na funkce. Situace je složitější, pokud aplikace současně používá více ovladačů.

    Místo toho, aby každá aplikace musela tuto akci provádět samostatně, poskytuje ODBC Správce ovladačů. Správce ovladačů implementuje všechny funkce ODBC – většinou jako přímé volání funkcí ODBC v ovladačích – a je staticky propojen s aplikací nebo načten aplikací v době běhu. Aplikace tedy volá funkce ODBC podle názvu ve Správci ovladačů, nikoli ukazatelem v každém ovladači.

    Když aplikace potřebuje konkrétní ovladač, nejprve požádá o popisovač připojení, se kterým má ovladač identifikovat, a potom požádá, aby správce ovladačů načetl ovladač. Správce ovladačů načte ovladač a uloží adresu každé funkce v ovladači. Chcete-li volat funkci ODBC v ovladači, aplikace tuto funkci volá ve Správci ovladačů a předává popisovač připojení ovladači. Správce ovladačů pak zavolá funkci pomocí adresy, kterou předtím uložil.

  • Rozhraní ODBC zpřístupňuje velký počet funkcí DBMS, ale nevyžaduje, aby ovladače podporovaly všechny. Pokud rozhraní ODBC odhalilo pouze funkce, které jsou společné pro všechny dbMS, bylo by malé použití; důvod, proč dnes existuje tolik různých DBMSs, je, že mají různé funkce. Pokud rozhraní ODBC odhalilo všechny funkce, které jsou k dispozici v jakémkoli DBMS, není možné implementovat ovladače.

    Místo toho rozhraní ODBC zveřejňuje velký počet funkcí – více než je podporuje většina dbMS – ale vyžaduje, aby ovladače implementovaly pouze podmnožinu těchto funkcí. Ovladače implementují zbývající funkce pouze v případě, že jsou podporovány základní dbMS nebo pokud se rozhodnou je emulovat. Aplikace tak mohou být zapsány tak, aby využívaly funkce jednoho DBMS, jak jsou vystaveny ovladačem pro danou databázi DBMS, aby používaly pouze tyto funkce používané všemi dbMS, nebo aby kontrolovaly podporu konkrétní funkce a odpovídajícím způsobem reagovaly.

    Aby aplikace může určit, jaké funkce ovladač a DBMS podporují, poskytuje rozhraní ODBC dvě funkce (SQLGetInfo a SQLGetFunctions), které vracejí obecné informace o schopnostech ovladače a DBMS a seznam funkcí, které ovladač podporuje. Rozhraní ODBC také definuje úrovně dodržování syntaxe API a SQL, které určují široké rozsahy funkcí podporovaných ovladačem. Další informace naleznete v tématu Úrovně shody.

    Je důležité si uvědomit, že rozhraní ODBC definuje společné rozhraní pro všechny funkce, které zveřejňuje. Z tohoto důvodu aplikace obsahují kód specifický pro funkce, ne kód specifický pro DBMS a mohou používat ovladače, které tyto funkce zveřejňují. Jednou z výhod je, že aplikace nemusí být aktualizovány, když jsou funkce podporované DBMS vylepšené; místo toho, když je nainstalován aktualizovaný ovladač, aplikace automaticky používá funkce, protože jeho kód je specifický pro funkce, nikoli pro konkrétní ovladače nebo DBMS.