Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Emeric Boehme Geändert vor über 11 Jahren
1
Open Database Connectivity (ODBC)
2
© Prof. T. Kudraß, HTWK Leipzig Open Database Connectivity (ODBC) Idee: – API für eine DBMS, das ein Call-Level-Interface für die Ausführung von SQL-Befehlen darstellt Vergleiche SQL/CLI – Bestandteil des SQL:1999 Standard – Angleichung mit ODBC geplant Software-Architektur vergleichbar wie JDBC – Driver Manager und Driver für jedes angeschlossene DBMS – ODBC nicht objektorientiert, DBMS-Interface auf niedrigerem Level – Gefahr von Memory Leaks
3
© Prof. T. Kudraß, HTWK Leipzig Programmstruktur SQLAllocEnv (&henv); SQLAllocConnect (henv,&hdbc); SQLConnect(hdbc,database_name,userId,password) SQLAllocStmt (hdbc,&hstmt); SQLExecDirect (hstmt,... SQL statement... );.. verarbeite Ergebnisse. SQLFreeStmt (hstmt,fOption); SQLDisconnect (hdbc); SQLFreeConnect (hdbc); SQLFreeEnv (henv);
4
© Prof. T. Kudraß, HTWK Leipzig ODBC Funktionen SQLAllocEnv() – allokiert und initialisiert Speicher für eine Environment Area, genutzt vom Driver Manager für Run-Time Informationen – liefert einen Handle zurück (in C: Pointer) SQLAllocConnect() – allokiert Speicher für die Connection und liefert einen Connection Handle zurück, hdbc SQLConnect() – lädt DB-Driver und verbindet sich mit dem DB-Server – auch mehrere Verbindungen zu DB-Managern möglich SQLAllocStmt() – allokiert Speicher innerhalb des Drivers für ein SQL Statement und liefert einen Handle, hstmt, für dieses Statement zurück
5
© Prof. T. Kudraß, HTWK Leipzig ODBC Funktionen (Forts.) SQLExecDirect() – bekommt einen Statement Handle und eine String-Variable für das eigentliche Statement – veranlaßt Prepare und Execute für das Statement im Server – Retrieval (SELECT), DML (UPDATE) und DDL-Befehle (CREATE) möglich – produziert ein Resultset, auf das durch Cursor zugegriffen werden kann SQLDisconnect() – löst Verbindung zum Server SQLFreeStmt(),SQLFreeConnect(),SQLFreeEnv() – Freigabe der Handle und des allokierten Speichers
6
© Prof. T. Kudraß, HTWK Leipzig Prepared Statements Prepare Statement SQLPrepare (hstmt,... SQL statement...); kann Platzhalter ? beinhalten Execute Statement SQLExecute (hstmt); Bereitstellen von Parametern an dynamisches SQL- Statement SQLBindParameters (hstmt,1,SQL_PARAMETER_INPUT, SQL_C_SSHORT,SQL_SMALLINT,&int1);
7
© Prof. T. Kudraß, HTWK Leipzig Cursor Daten werden über Cursor zurückgegeben zusätzliche ODBC Funktionen, um Daten in Applikation zu bringen SQLBindCol (hstmt,1,SQL_C_SSHORT,&int2); bindet erste Spalte des ResultSet an Variable int2 SQLFetch (hstmt); Cursor wird weitergesetzt, Werte der aktuellen Zeile werden in Host-Variablen gespeichert wenn Variable nicht gebunden: SQLGetData (hstmt,2,SQL_C_SSHORT,&int3);
8
© Prof. T. Kudraß, HTWK Leipzig Cursor Typen STATIC – bei Ausführung von SELECT Berechnung des ResultSet, separat von Basistabelle abgespeichert – Aufruf von SQLFetch holt eine Zeile vom ResultSet KEYSET_DRIVEN – bei Ausführung von SELECT wird Menge von Pointern auf Zeile der Basistabelle angelegt – Aufruf von SQLFetch folgt Pointer und holt Zeilen von Basistabelle – Änderungen in Basistabelle beim nächsten Fetch sichtbar – neue Datensätze nicht sichtbar (Insert-Anomalie) DYNAMIC – Daten im ResultSet komplett dynamisch, Änderungen im ResultSet möglich und bei nachfolgendem Fetch sichtbar
9
© Prof. T. Kudraß, HTWK Leipzig Cursor-Verarbeitung Setzen des Cursor-Typs: SQLSetStmtOption (hstmt,SQL_CURSOR_TYPE,Option) positionierte Updates durch nicht-statische Cursor SQLExecDirect (hstmt1,SELECT * FROM Employee \ FOR UPDATE OF Salary); nach einigen Fetch-Statements, Erhöhung des Gehalts um 1000 im aktuellen Datensatz SQLExecDirect (hstmt2,UPDATE Employee SET Salary = Salary + 1000 \ WHERE CURRENT OF employee_cursor); Verbindung des employee_cursor mit dem Statement Handle SQLSetCursor (hstmt1,employee_cursor);
10
© Prof. T. Kudraß, HTWK Leipzig Statusabfrage RETCODE retcode1; : retcode1 = SQLConnect(...); if (retcode != SQL_SUCCESS) { : do something }
11
© Prof. T. Kudraß, HTWK Leipzig Ausführung von Transaktionen Autocommit-Modus – ausschalten, wenn zwei oder mehr Statements zu Transaktion gruppiert werden sollen SQLSetConnection (hdbc,SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF); Isolation Level ändern SQLSetConnectionOption (hdbc, SQL_TXN_ISOLATION, SQL_TXN_REPEATABLE_READ); Transaktionen beenden oder zurückrollen SQLTransact (henv,hdbc,Action) Action = SQL_COMMIT oder SQL_ABORT
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.