Transcript ODBC

ODBC
Autor:Matej Kulcsár
Predmet:Databázove systémy
ODBC-Open database
conectivity
ODBC je štandardizovaná technológia API (Application programming
interface), ktorá má za úlohu poskytnúť rovnaký prístup k rôznym
druhom databáz (Oracle, MySQL, ...).
ODBC zahŕňa štyri komponenty:
•
•
•
•
Aplikácia (program) – bežiaci pod systémom Windows
ODBC manager – dynamická knižnica, ktorá obsluhuje ovládače
ODBC drivers – zabezpečujú spojenie na databázy
Zdrojové dáta (databáza)
Charakteristika ODBC
Hlavnou časťou je ODBC manager. Ten slúži na vykonanie
požadovaných operácií pomocou ovládačov. V prípade požiadavky
vykonania nejakej operácie prenáša túto požiadavku cez ovládače na
databázu a v prípade, že súčasťou operácie sú aj návratové údaje,
tieto po získaní poskytuje aplikácii.
V tomto modeli sa príkazy nezadávajú priamo databáze. Požiadavka
je prenesená na ODBC, ktorý pomocou ovládačov preloží daný príkaz
do podoby zrozumiteľnej konkrétnej databáze. Každý ODBC ovládač
vie všetko o tom, ako preložiť štandardný príkaz na príkaz, ktorému
rozumie daná databáza. Tento jednotný prístup k rôznym druhom
databáz umožňuje podstatné zjednodušenie práce s nimi.
Váš program <----> ODBC manager<----> ODBC Drivers <----> Databáza
Charakteristika ODBC
ODBC manager je poskytovaný Microsoftom a ovládače pre
jednotlivé databázy poskytuje prevádzkovateľ alebo autor databázy.
Problém môže nastať v prípade, že konkrétna databáza neposkytuje
všetky možnosti. Nakoľko je cez ODBC štandardizovaný prístup k
databázam, príkazy pre ODBC musia vyhovovať každej databáze.
Jednotlivé databázy však neposkytujú rovnaké možnosti práce, teda sa
môže stať, že príkaz, ktorý chceme vykonať nebude možné na danej
databáze uskutočniť. Tento problém je riešený štandardizáciou toho, čo
databáza musí vedieť spracovať. Pomocou týchto štandardov potom
vieme, že daný príkaz bude určite implementovaný a v prípade, že
databáza poskytuje viac možností, vieme využiť aj tie.
Pre prístup k databázam cez ODBC sa používajú príkazy jazyka
SQL (Structured querry language).
Charakteristika ODBC
Štandardná práca s databázou pomocou ODBC vyzerá
nasledovne:
1.
Pripojenie sa na databázu
2.
Spracovanie návratových hodnôt (ak nejaké sú)
3.
Odpojenie sa od databázy
PHP a ODBC
Pri komunikácii s databázovým serverom dochádza k nasledujúcej
„reťazovej“ tranzakcii.
Prehliadač <---->HTTP <---->WWWserver <---->SAPI <---->PHP <--->ODBC <---->
NATIVE <---->ENGINE <---->databáza <---->ENGINE <---->PHP <---->
SAPI <---->WWWserver <---->HTTP <---->Prehliadač
Pripojenie k databázovému serveru zabezpečí funkcia
ODBC_Connect( ). Jej parametre tvorí názov databázy, login a heslo.
Funkcia vracia číslo spojenia.
PHP a ODBC
Pripojenie k databaze:
$spojenie=ODBC_Connect(“isf”,”nobody”,”anonym”);
SQL dopyt vykonáva funkcia ODBC_Exec( ), parametre tvroí číslo
spojenia a samotný SQL príkaz v úvodzovkách.
$vysledok = ODBC_Exec($spojenie, "SELECT * FROM Zamestnanci");
Funkcia vracia referenčné číslo, pomocou ktorého funckia
ODBC_Fetch_Row( ) sprístupňuje ntice. Ak už niet čo sprístupňiť, vráti
false. Jednotlivé položky aktuálneho záznamu čítame prostredníctvom
funkcie ODBC_Result( ). Jej parametre tvorí názov položky a číslo
referencie, ktore vracia funkcia ODBC_EXEC().
PHP a ODBC
while (ODBC_Fetch_Row($vysledok))
echo ODBC_Result($vysledok,”RC”).” “.ODBC_Result($vysledok,
“Meno”).”“.ODBC_Result($vysledok,”Priezv”).” <BR>”;
Databázu uzavrieme pomocou ODBC_Close() .
ODBC_Close($spojenie);
PHP a ODBC
Ošetrenie chýb pripojenia sa asi najednoduchšie realizuje pomocou ifelse podmienok, pričom, v premenných $spojenie a $vysledok sa
môžu vyskytnúť negatívne výsledky, a vtedy to indikuje chybu, a je
veľmi užitočné keď takéto chyby budú ošetrené. Ošetrenie sa realizuje
jednoducho vygenerovaním a vypísaním príslušnej chybovej hlášky.
Štandardne pri interpretovaní príkazov php generuje hlášky, ktorých
výpis je možné potlačiť zaradením symbolu @ pred riadok.
@$spojenie = ODBC_Connect("test", "", "");
if (!$spojenie): echo "Nepodarilo sa pripojit k databáze!";
else: @$vysledok = ODBC_Exec($spojenie,"SELECT * FROM
Zamestnanci");
if (!$vysledok): echo "Chyba pri vykonavani SQL-dotazu!";
else: while(ODBC_Fetch_Row($vysledok)):..... pokracovanie kodu
PHP a ODBC
Pre ODBC chyby existujú príkazy:
•
odbc_errormsg -- zoberie posledný "error message"
string odbc_errormsg ( [int connection_id])
vráti reťazec obsahujúci posledný ODBC error message, alebo
prázdny reťazec, ak chyba nenastala.
•
odbc_error -- zoberie posledný "error code"
string odbc_error ( [int connection_id])
vráti 6-ciferný ODBC status, alebo prázdny reťazec, ak chyba
nenastala.
JAVA a ODBC (JDBC)
JDBC - Java DataBase Connectivity - súbor tried umožňujúcich
aplikácii posielať SQL príkazy na systém riadenia bázy dát (SRBD) a
získavať výsledky. Tieto triedy a rozhrania sa nachádzajú v balíku
java.sql.
Databázové systémy
Databázový systém = SRBD + BD
SRBD (DBMS) - Systém Riadenia Bázy Dát (Database Management
System)
BD (DataBase) - Báza Dát
Architektúra JDBC
JDBC API obsahuje dve základné rozhrania: pre programátorov
Aplikácií (JDBC API) a pre programátorov ovládačov databázy (JDBC
Driver API).
JAVA a ODBC (JDBC)
Vrstvy:
Aplikácia - volanie metód JDBC na poslanie SQL príkazov a získanie
výsledkov
• žiada o spojenie so zdrojom dát
• posiela SQL príkazy
• definuje oblasť uloženia výsledku
• získava výsledky
• spracováva chyby
• uzatvára spojenie
Driver Manager (správca ovládačov) - nahranie špecifického ovládača
pre aplikáciu
• určenie umiestnenia ovládača
• spracovanie volaní JDBC
• definuje oblasť uloženia výsledku
• získava výsledky
• spracováva chyby
JAVA a ODBC (JDBC)
Driver (ovládač) - posielanie SQL príkazov na zdroj dát, získavanie
výsledkov. Java odlišuje 4 typy ovládačov.
Data source (zdroj údajov) - predstavuje SRBD (+sieťová vrstva)
JAVA a ODBC (JDBC)
Komunikáciu so
SRBD pomocou
JDBC API:
Postup pri
komunikácii so
SRBD pomocou
rozhrania JDBC v
Jave vyjadruje
nasledujúci obrázok.
JAVA a ODBC (JDBC)
Ošetrenie chýb pri práci s DB
V JAVE sa používaju výnimky, ktoré keď vzniknú tak signalizujú chybu.
Odchytávanie takýchto vynímiek sa realizuje v bloku try-catch-finally a
syntax vyzerá následovne.
try{ ... kod pre pracu s DB ...
}catch (Exception e){
System.out.println("Chyba pri práci s DB "+e.getMessage());
return null;
}
finally{ ... kod ktory sa urcite vykona aj po vyhodeni exception,
zvykne sa tu davat odpojenie od servra
(zatvorenie databazy) ...
}
Borland C++ Builder a ODBC
Jedným zo spôsobov ako vytvoriť program, ktorý bude pristupovať k
databáze je použitie prostredia Borland C++ Builder. Toto prostredie
má implementované prvky na riadenie a prístup k databáze.
PRÍKLAD V PHP
PHP podporuje viac databázových systémov. Funkcie pre prácu s
určitým SRBD začínajú jeho názvom. PHP preto obsahuje funkcie
začínajúce ODBC_, ktoré slúžia pre spoluprácu s ODBC rozhraním,
funkcie začínajúce na Pg_, ktoré slúžia na komunikáciu s SRBD
Postgres alebo MySQL_, ktoré zas komunikujú s MySQL databázovým
systémom. Najprv je nutné pripojiť sa k SQL serveru pomocou funkcie
xxx_Connect(), kde za xxx dosadíme predponu príslušného SRBD
(MySQL_Connect( ), Pg_Connect( )).napr:
$spojenie = MySQL_Connect(“localhost”);
kde “localhost” je meno počítača, na ktorom beží MySQL.
Prihlasovanie na MySQL server môžebyť aj v tvare:
$spojenie =MySQL_Connect(“mgx”,”nobody”,”anonym”);
kde parametre znamenajú podľa poradia ("meno_počítača",
"meno_užívateľa", "heslo").
PRÍKLAD V PHP
Funkcia vracia číslo spojenia s databázou. Týmto by sme sa pripojili na
nami zvolený databázový server. Teraz si musíme zvoliť príslušnú
databázu, s ktorou chceme pracovať. Dosiahneme to pomocou
príkazu:
xxx_Select_DB ("meno_databázy" );
Pre zadávanie SQL dopytov slúži funkcia MySQL_Query( ), alebo
MySQL_Exec(). Prvým parametrom je SQL výraz a druhý číslo
spojenia. Tento parameter je nepovinný a môžeme ho vynechať.
Výsledkom je číslo, ktoré slúži na prácu s výsledko SQL dopytu ako
referenčné číslo.
$vysledok = MySQL_Query(“SELECT * FROM OS_Udaje ORDER
BY Priezv”);
PRÍKLAD V PHP
Pomocou referenčného čísla je možné získať ďalšie informácie,
napríklad počet n-tíc tuples v tejto projekcii. Na to slúži funkcia
MySQL_Num_Rows (), ktorej parameter tvorí referenčné číslo.
Funkcia vracia počet záznamov, na ktoré odkazuje referenčná číslo. Napr:
echo “ V tabulke je “.MySQL_Num_Rows($vysledok).” zaznamov”;
Výpis jednotlivých entíc zabezpečuje funkcia MySQL_Fetch_Array(),
ktorej parametrom je referenčné číslo. Funkcia vráti obsah entice a
presunie sa na ďalšiu. Ak už niet čo vypísať, vráti false. Obsah
všetkých n-tíc zabezpečíme cyklom:
While ($ntica=MySQL_Fetch_Array($vysledok))
echo $ntica[“RC”].” “.$ntica[“Meno”].” “.$ntica[“Priezv”].”<BR>”;
PRÍKLAD V PHP
Spojenie ukončíme pomocou funkcie MySQL_Close( ), kde
Parametrom je číslo spojenia. Napr: MySQL_Close($spojenie );
Pre prácu s databázovými zdrojmi platia obdobné príkazy:
integer ODBC_Connect("meno_databázy","login","password")
Funkcia slúži na pripojenie k dátovému zdroju. Návratová hodnota
funkcie v prípade nadviazania spojenia je číslo spojenia. V prípade
neúspechu vracia hodnotu false
integer ODBC_Exec(integer spojenie, string SQL_prikaz);
Funkcia slúži na vykonanie SQL príkazu. Ak pri vykonávaní príkazu
došlo k chybe funkcia vracia hodnotu false Obdoba tohto príkazu je aj
príkaz ODBC_Do(); s presne rovnakou syntaxou.
Otázky
Čo znamená ODBC?
a) Open Database Conectivity
b) Close Database Conectivity
c) Create Database Conectivity
Aké príkazy existujú pre ODBC chyby?
a) odbc_errormsg
b) odbc_error
c) odbc_chyba
Pomocou akej funkcie sa môžeme pripojiť k SQL serveru?
a) xxx_Connect()
b) Connect()_xxx
c) Connect_xxx()