2. DB-API: Programmierschnittstellen zu Datenbanken 2.1 ODBC
proprietäre DB-APIs Anwendung passt passt nicht SYBASE API ORACLE OCI INGRES API ORACLE-DB INGRES-DB SYBASE-DB
ODBC-Konzept Anwendung passt passt ODBC Treiber ODBC Treiber SYBASE API ORACLE OCI INGRES API ORACLE-DB INGRES-DB SYBASE-DB
ODBC = Open DataBase Connectivity Initiator: Microsoft und andere Zweck: Einheitliche API für verschiedene DBMS (API = Application Program Interface) CLI = Call Level Interface Implementierung der Definition der X/Open Group Sammlung von C-Funktionen Grundlage: Client-Server Architektur Komponenten von ODBC: Treiber-Manager je ein Treiber für jedes DBMS
Komponenten von ODBC ODBC-Treiber Manager Anwendung ODBC-Treiber ODBC-Umgebung einrichten Anwendung DB-Aktionen aufrufen passenden Treiber aktivieren ODBC-Treiber ODBC-Treiber2 Übersetzung OCI-Bibliothek Netzwerkkommunikation Oracle DB-Server
SQLAllocStmt(..., &hstmt) Handle-Konzept SQLAllocStmt(..., &hstmt) Speicherplatz reservieren hstmt Handle zeigt auf Info SQLBindColumn(hstmt,... Zugriff Inhalt Handle SQLExecDirect(hstmt,... Trägt Info ein ODBC-Treiber
ODBC-Funktionen: Umgebungs- u. Verbindungshandle ODBC-API einbinden #include <odbcinst.h> Umgebungshandle einrichten HENV handlevariable_environment; SQLAllocEnv (&handlevariable_environment) Verbindungshandle einrichten: HDBC handlevariable_Verbindung; SQLAllocConnect (handlevariable_environment, &handlevariable_verbindung)
ODBC-Funktionen: Verbindungsaufbau zur Datenbank SQLConnect( handlevariable_verbindung, Datenquellenname /* logischer Name der Datenbank */, Art_Zeichenkette /* z.B. SQL_NTS = Null Terminatet String */, Benutzername /* z.B. "dapro01" */, Länge_Benutzername /* z.B. 15 */, Passwort, Länge_Passwort /* z.B. 14 */)
ODBC-Funktionen: SQL-Anweisung senden Anweisungshandle einrichten HSTMT handlevariable_anweisung; SQLAllocStmt (handlevariable_verbindung, &handlevariable_anweisung); SQL-Anweisung ausführen SQLExecDirect( handlevariable_anweisung, string_mit_SQL_Anweisung, Art_Zeichenkette);
ODBC-Funktionen: Suchergebnisse mit Cursor holen Bindung von Tabellenspalten zu C-Variablen SQLBindCol( handlevariable_anweisung, Spaltennummer /* z.B. 1 */, Datentyp_der_Spalte, &Zielvariable, sizeof(Zielvariable), &Datenlänge) Nächsten Datensatz holen SQLFetch(handlevariable_anweisung)
ODBC-Funktionen: Spalten holen Eine Spalte des aktuellen Datensatzes holen SQLGetData( handlevariable_anweisung, Spaltennummer, Datentyp_der_Spalte, &Zielvariable, sizeof(&Zielvariable), &Datenlänge);
ODBC-Funktionen: Abfrage vorbereiten Abfrage vorbereiten SQLPrepare( handlevariable_anweisung, string_mit_SQL_Anweisung, Art_Zeichenkette); Vorbereitete Abfrage ausführen SQLExecute( handlevariable_anweisung);